C语言编程找出100以内素数
6个回答
推荐于2017-09-06 · 知道合伙人软件行家
关注
展开全部
1.素数就是一个大于1的自然数,除了1和它本身外,不能被其他自然数整除
#include <stdio.h>
bool IsPrime(int n)
{
if (n <= 1) return false;
if (n % 2 == 0) return n == 2;
for (int i = 3; ; i += 2)
{
if (i > n/i) break; // 等价于 i*i > n, 不用开方
if (n % i == 0) return false;
}
return true;
}
int main()
{
for (int n = 0; n <= 100; n++)
if (IsPrime(n))
printf("%3d", n);
return 0;
}
展开全部
#include<stdio.h>
int main()
{
int n1,nm,i,j,flag,count=0;
do{
printf("Input START and END=?");
scanf("%d%d",&n1,&nm);
}while(!(n1>0&&n1<nm));
printf("...........PRIME TABLE(%d--%d)............\n",n1,nm);
if(n1==1||n1==2)
{
printf("%4d",2);
n1=3;count++;
}
for(i=n1;i<=nm;i++)
{
if(!(i%2))continue;
for(flag=1,j=3;flag&&j<i/2;j+=2)
if(!(i%j))flag=0;
if(flag) printf(++count%15?"%4d":"%4d\n",i);
}
}
网上很多……也很简单的
你要是只要1-100的,可以改成这样:
#include<stdio.h>
void main()
{
int i,j,flag,count=0;
for(i=1;i<=100;i++)
{
if(!(i%2))continue;
for(flag=1,j=3;flag&&j<i/2;j+=2)
if(!(i%j))flag=0;
if(flag) printf(++count%15?"%4d":"%4d\n",i);
}
}
int main()
{
int n1,nm,i,j,flag,count=0;
do{
printf("Input START and END=?");
scanf("%d%d",&n1,&nm);
}while(!(n1>0&&n1<nm));
printf("...........PRIME TABLE(%d--%d)............\n",n1,nm);
if(n1==1||n1==2)
{
printf("%4d",2);
n1=3;count++;
}
for(i=n1;i<=nm;i++)
{
if(!(i%2))continue;
for(flag=1,j=3;flag&&j<i/2;j+=2)
if(!(i%j))flag=0;
if(flag) printf(++count%15?"%4d":"%4d\n",i);
}
}
网上很多……也很简单的
你要是只要1-100的,可以改成这样:
#include<stdio.h>
void main()
{
int i,j,flag,count=0;
for(i=1;i<=100;i++)
{
if(!(i%2))continue;
for(flag=1,j=3;flag&&j<i/2;j+=2)
if(!(i%j))flag=0;
if(flag) printf(++count%15?"%4d":"%4d\n",i);
}
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
楼主大括号都未能匹配,{有两个,}有三个,编译就通过不了的。
刚写了份代码,已调试通过,供楼主参考:
#include
main(void)
{
int i,t;
for(i=1; i<=100; i++)
{
if(i == 1)
continue;
if(i == 2)
{
printf("%d,",i);
continue;
}
for(t=2; t <= i/2; t++)
{
if((i%t) == 0)
break;
}
if(t > i/2)
{
printf("%d,",i);
}
}
printf("\n");
return 0;
}
输出的结果为:2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,
再说说楼主代码中一些错误:
1.之前提到编译上就不能通过。{和}个数未能匹配。
2. if(100%i!=0) break; 该语句的含义是100除以i的余数不等于0则跳出循环,当为1时,就已经跳出循环了。而且这对于质素的判断是毫无意义的,可以删除。
3. for(t=1;t<=i;t++) 质数的判断的话,t应该是从2开始计数的,否则i%1肯定是等于0的。应修改为for(t=2; t<=i; t++)。此外,这里可以参考我的代码,t<=i/2即可,用以提高提升效率。
希望对楼主有所帮助。谢谢。
刚写了份代码,已调试通过,供楼主参考:
#include
main(void)
{
int i,t;
for(i=1; i<=100; i++)
{
if(i == 1)
continue;
if(i == 2)
{
printf("%d,",i);
continue;
}
for(t=2; t <= i/2; t++)
{
if((i%t) == 0)
break;
}
if(t > i/2)
{
printf("%d,",i);
}
}
printf("\n");
return 0;
}
输出的结果为:2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,
再说说楼主代码中一些错误:
1.之前提到编译上就不能通过。{和}个数未能匹配。
2. if(100%i!=0) break; 该语句的含义是100除以i的余数不等于0则跳出循环,当为1时,就已经跳出循环了。而且这对于质素的判断是毫无意义的,可以删除。
3. for(t=1;t<=i;t++) 质数的判断的话,t应该是从2开始计数的,否则i%1肯定是等于0的。应修改为for(t=2; t<=i; t++)。此外,这里可以参考我的代码,t<=i/2即可,用以提高提升效率。
希望对楼主有所帮助。谢谢。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include <stdio.h>
#include <math.h>
void main ()
{
int x,i,j;
for(i=2;i<100;i++)
{1
x=1;
for(j=2;j<=sqrt(i);j++)
if (i%j==0)
{
x=0;
break;
}
if (x)
printf ("%d\n",i);
}
/* for(i=101;i<=200;i++)
{
if (x)
printf ("%-3d",i);
}*/
}
#include <math.h>
void main ()
{
int x,i,j;
for(i=2;i<100;i++)
{1
x=1;
for(j=2;j<=sqrt(i);j++)
if (i%j==0)
{
x=0;
break;
}
if (x)
printf ("%d\n",i);
}
/* for(i=101;i<=200;i++)
{
if (x)
printf ("%-3d",i);
}*/
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include<stdio.h>
#include<math.h>
main()
{
int m,i,k,h=0,leap=1;
printf("\n");
for(m=2;m<=100;m++)
{ k=sqrt(m+1);
for(i=2;i<=k;i++)
if(m%i==0)
{leap=0;break;}
if(leap) {printf("%-4d",m);h++; //打印素数
if(h%10==0)
printf("\n");
}
leap=1;
}
printf("\nThe total is %d",h); //打印素数总数
}
#include<math.h>
main()
{
int m,i,k,h=0,leap=1;
printf("\n");
for(m=2;m<=100;m++)
{ k=sqrt(m+1);
for(i=2;i<=k;i++)
if(m%i==0)
{leap=0;break;}
if(leap) {printf("%-4d",m);h++; //打印素数
if(h%10==0)
printf("\n");
}
leap=1;
}
printf("\nThe total is %d",h); //打印素数总数
}
追问
程序不对吧,当i=2时,i>k,怎么办
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询