C语言编程找出100以内素数

 我来答
lgao622
推荐于2017-09-06 · 知道合伙人软件行家
lgao622
知道合伙人软件行家
采纳数:1137 获赞数:6550
毕业于武汉工程大学邮电与信息工程学院通信专业,软件行业,4年工作经验。

向TA提问 私信TA
展开全部

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;
}

ok洛阳水席
2013-05-05 · TA获得超过1839个赞
知道小有建树答主
回答量:580
采纳率:50%
帮助的人:527万
展开全部
#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);
}
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友8f366bb5f
2013-05-06 · TA获得超过188个赞
知道小有建树答主
回答量:267
采纳率:100%
帮助的人:249万
展开全部
楼主大括号都未能匹配,{有两个,}有三个,编译就通过不了的。
刚写了份代码,已调试通过,供楼主参考:
#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即可,用以提高提升效率。

希望对楼主有所帮助。谢谢。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
追梦58我心永恒
2013-05-12
知道答主
回答量:8
采纳率:0%
帮助的人:8883
展开全部
#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);
}*/
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
king_lc283
2013-05-05 · TA获得超过336个赞
知道答主
回答量:218
采纳率:0%
帮助的人:101万
展开全部
#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); //打印素数总数
}
追问
程序不对吧,当i=2时,i>k,怎么办
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式