24小时热门版块排行榜    

查看: 363  |  回复: 3

刘源416

木虫 (正式写手)

至尊

[求助] 读不懂 已有1人参与

#include<stdio.h>
main()
{
int sum=0,i,n,m;
for(i=2;i<=100;i++)
{
for(n=2;n<=i/2;n++)
{
if(i%n==0)
break;
}
if(n>i/2)
//printf("%d\n",n);
{m++;
printf("%d ",i);
if(m%5==0)printf("\n";
sum+=i;
}
  }
printf("\n1~100内素数的个数:%d\n",m);
printf("1~100内所有素数的和:%d\n",sum);
}
此程序读不懂
回复此楼

» 猜你喜欢

上善若水 虚怀若谷 宁静致远 淡泊明志
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zzy滴号

金虫 (小有名气)

【答案】应助回帖

★ ★ ★ ★ ★
感谢参与,应助指数 +1
刘源416: 金币+5, ★★★很有帮助 2015-06-28 10:47:22
1、外层循环用来遍历2-100间的自然数;
2、如果是素数,那么此数就不能整除1和本身之外的数。所以只要判断2到此数之间是否存在一个数使原数可以整除它即可;
3、为了增加效率,实际上在判断素数时范围只需从2到原数的一半即可。若发现可以整除的数,则原数不是素数,内循环终止,此时必定n<=i/2。
4、反之,若n>i/2,那么证明原数为素数。m++增加素数个数并打印原数。每隔五个数换行( if(m%5)==0 )。然后增加总和sum。
5、之后,外层进入下一轮循环。
6、顺便提一下m没有赋初值。应该m=0。

[ 发自手机版 http://muchong.com/3g ]
天道酬勤
2楼2015-06-28 07:53:37
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

刘源416

木虫 (正式写手)

至尊

引用回帖:
2楼: Originally posted by zzy滴号 at 2015-06-28 07:53:37
1、外层循环用来遍历2-100间的自然数;
2、如果是素数,那么此数就不能整除1和本身之外的数。所以只要判断2到此数之间是否存在一个数使原数可以整除它即可;
3、为了增加效率,实际上在判断素数时范围只需从2到原 ...

我就是看不懂它的素数的判别方法
上善若水 虚怀若谷 宁静致远 淡泊明志
3楼2015-06-28 10:48:52
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zzy滴号

金虫 (小有名气)

引用回帖:
3楼: Originally posted by 刘源416 at 2015-06-28 10:48:52
我就是看不懂它的素数的判别方法...

如果自然数n不是素数,那么其必然有两个因子,因为内层循环的开始为2,所以另一个因子最大不会超过n/2 (n/2 > n/3 ....)。 因此,只要检测2-n/2间的数即可。

[ 发自手机版 http://muchong.com/3g ]
天道酬勤
4楼2015-06-28 12:35:19
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 刘源416 的主题更新
信息提示
请填处理意见