对于一个大于或等于3的正整数,判断它是不是一个素数。

[复制链接]
查看11 | 回复3 | 2011-9-8 10:05:46 | 显示全部楼层 |阅读模式
例:S1:输入n的值S2:i=2(i作为除数)S3:n被i除得余数rS4:如果r=0,表示n能被i整除,则输出n“不是素数“,算法结束;否则执行S5S5:i1=iS6:如果i大于sqrt(n),输出n“是素数\",然后结束。否则返回S3我没有理解到的问题是:(1)S4:如果余数r=0。。。这个是什么意思,在什么情况下被除数与除数会产生0。或者这个0是代表其它的什么意思?我觉得这句好像是没有作用的?(2)假设n=合数12,合数12的平方根是3.464.........。如果i=2,那么循环两次后,i的值就等于4。按照S6i大于了sqrt(n),那能判定12是素数吗?
回复

使用道具 举报

千问 | 2011-9-8 10:05:46 | 显示全部楼层
余数就是被除数除以除数后不能被整除,而剩余的小于除数的数。5除以2商为2余数为16除以2商为3余数为0;为0,则表示除数为被除数的因子。第二个问题,12的话,怎么会让i=4呢?i=3时,s4条件就成立了,就输出不是素数,循环结束了,根本到不了i=4的循环。
回复

使用道具 举报

千问 | 2011-9-8 10:05:46 | 显示全部楼层
(1),r是余数,比如5除于2得2余1,r等于1,如果r等于0表示能整除,就不符合素数的定义,就可以判定不是素数。(2),合数在S4就直接被判定了,不会执行下面的了。
回复

使用道具 举报

千问 | 2011-9-8 10:05:46 | 显示全部楼层
(1)不是除的问题a%b而是这个取余例如:a=3b=2则:a%b=1,b%a=3这就是取余操作(2)这个问题和前面取余操作是一体的前面的已经将不合适的过滤了当isqrt(n)这时已经取遍了所有的除数所以就是素数了好好研究一下就知道了#includeiostream.h#includemath.h#includeiomanip.hintmain(){inta,b,l=0;cout\"请输入两个数:\"endl;cinab;cout\"from\"a\"to\"b\"间的所有素数为:\"endl;if(a==2)cout\"2\";if(a%2==0)a;for(intc=a;c=b;c=c2){intsqrtc=sqrt(c);for(inti=2;i=sqrtc;i){if(c%i==0)break;}if(isqrtc){if(l==0)coutendl;coutsetw(5)c;}}coutendl;}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行