C语言判断素数的问题

jadyzdr 2010-03-16 02:25:29
#include"math.h"
#include"stdio.h"
void main()
{
int m,i,k,n=0;
for(m=101;m<200;m+=2)
{
k=sqrt(m);
for(i=2;i<=k;i++)
if(m%i==0) break;
if(i>=k+1)
{
printf("%4d",m);
n+=1;
}
if(n%10==0) printf("\n");
}
printf("\n");

}



问一下那个条件为什么是i>=k+1,不理解
...全文
188 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
china_west 2010-03-16
  • 打赏
  • 举报
回复
sqrt(k)+1 了,就是那个素数了啊
Angie20090909 2010-03-16
  • 打赏
  • 举报
回复
判断一个整数m是否是素数的算法是让m被i(i由2变到k=sqrt(m))除,如果m能被i整除,则m必然不是素数,不必再进行下去,此时的i必然小于或等于k;如果m不能被2到K之间的任一整数整除,则m应是素数,此时在完成最后一次后,使i再加1,因此i的值就等于k+1,这时判断i的值是否大于等于k+1,若是,则表明未被2到k之间的任一整数整除过,因此m就是素数了。懂了吗?O(∩_∩)O~
wzywsk 2010-03-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 huanmie_09 的回复:]
for(i=2;i<=k;i++)
if(m%i==0)
break;
if(i>=k+1)/*是素数*/


判断一个数m是否为素数,需要判断在2,3...sqrt(m)之间是否存在能被m整除的数。
如果存在,就说明m不是素数,这时可以跳出循环。
如果不存在,就一直进行循环,一直到循环满足退出条件.
即i > k;

k = sqrt(m);
k取整数.
所以:
i ……
[/Quote]
正解~
neu_gis 2010-03-16
  • 打赏
  • 举报
回复
循环的次数明显太多了,除数只需要是2,3,...,6*n-1,6*n+1(6*n+1 <= sqrt(m))即可
ArmStronger 2010-03-16
  • 打赏
  • 举报
回复
不就是 从i=2 到 i=k=sqrt(m)都判断过了嘛,说明是素数了
huanmie_09 2010-03-16
  • 打赏
  • 举报
回复
for(i=2;i<=k;i++)
if(m%i==0)
break;
if(i>=k+1)/*是素数*/


判断一个数m是否为素数,需要判断在2,3...sqrt(m)之间是否存在能被m整除的数。
如果存在,就说明m不是素数,这时可以跳出循环。
如果不存在,就一直进行循环,一直到循环满足退出条件.
即i > k;

k = sqrt(m);
k取整数.
所以:
i >= k+1的话,就说明2,3...sqrt(m)之间不存在能被m整除的数,说明m是素数.
go_Michael 2010-03-16
  • 打赏
  • 举报
回复
i>=k+1就是i>=sqrt(m)+1 如果成立的话就不用继续判断 m即为素数嘛
grimmchen 2010-03-16
  • 打赏
  • 举报
回复
#include"math.h"
#include"stdio.h"
void main()
{
int m,i,k,n=0;
for(m=101;m<200;m+=2)
{
k=sqrt(m);
for(i=2;i<=k;i++)
if(m%i==0) break;
if(i>=k+1)
{
printf("%4d",m);
n+=1;
}
if(n%10==0) printf("\n");
}
printf("\n");

}

>=k+1,说明判断出来是素数了啊

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧