询问一个C++判断素数(除了能被1和本身整除)问题

zaixiankaifa 2012-02-25 03:52:47
最近看到一个用C++判断素数(除了能被1和本身整除)的问题例子,不是很懂:



int main(int argc, const char * argv[])
{

int n,i,is_prime=true;

cout<< "Enter a number and press Enter";
cin>>n;


i=2;
while(i<=sqrt(n)){
if(n%i==0)
is_prime=false;
i++;
}

if(is_prime)
cout<<"Number is prime."<<endl;

else{

cout<<"number is not prime."<< endl;
}

system("Pause");

return 0;
}



代码中,


i=2;
while(i<=sqrt(n)){
if(n%i==0)
is_prime=false;
i++;
}

不明白为啥要使用:i<=sqrt(n). 以及为什么要设置i=2 ? 请各位大牛帮忙解答,谢谢!
...全文
290 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
idoing_xsf 2012-02-25
  • 打赏
  • 举报
回复

i = 2; //n对i取余,i的值从2开始,随后i++
while(i <= sqrt(n))//i <= sqrt(n)纯粹为了减少循环的次数少作i++
{
if(n%i == 0) //n对i取余
is_prime = false;
i++;
}

素数的概念上面几楼已经给出
cao_julians 2012-02-25
  • 打赏
  • 举报
回复
当n能够被i整除时,一个事实一定要知道:这个n一定能够被另一整数k整除----记为k=n/i。这个k的位置是:
1<i<=sqrt(n)<=k<n.
就是说,n能被i整除,就不必求k了。
再换句话说,2到sqrt(n)之间没有i可以整除n,则sqrt(n)到n-1之间也没有k可以整除n。
例子:
n=49
i从2到7,(k从7到48)
taoyh2002 2012-02-25
  • 打赏
  • 举报
回复
素数就是除了1和自己,没有其他因子的数,如果该数没有小于等于它的平方根的因子(除了1),则不可能有大于它的平方根的因子; 举个例子,如果a=b * c, 如果 b >= sqrt(a),那么c <= sqrt(a).
这儿用i<=sqrt(n)可以提高性能,少算一些循环。

这儿是找除1和该数自己的因子,当然要从2开始。
Saleayas 2012-02-25
  • 打赏
  • 举报
回复
先看看数学上素数是怎么求的。
数学是叫我们怎么枚举素数,而程序是叫计算机怎么枚举素数的。
Saleayas 2012-02-25
  • 打赏
  • 举报
回复
因为 0 和 1 肯定不是素数。

还有就是如果一个数能够被一个比它的平方根大的数M整除,那么结果一定是一个比它的平方根小的整数N。
而这个 N 已经 遍历过了。

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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