[钱能|C++]素数判定,如何才能做到效率更高?

debugk 2008-10-30 08:04:28
钱能C++第二版P45,素数判定,判定m是否素数,除到m的平方根即可。如何才能更高效率呢?

我的代码如下,抛砖引玉,请问还有更简洁高效的吗?希望大家多多指点,谢谢。
#include <iostream>
#include <cmath>

using namespace std;

int main()
{
cout << "Input a number: ";
int m;
cin >> m;

double sqrtm=sqrt(m*1.0);
if(m%2 == 0) //如果是偶数,声明不是素数并退出
cout << m << " isn't a prime." << endl;
else
{
for(int i=1; i<=sqrtm; i++) //除以奇数,能除尽则声明是素数并退出,否则继续循环直到结束
{
if(m%(2*i+1) == 0)
{
cout << m << " isn't a prime." << endl;
return -1;
}
}

cout << m << " is a prime." << endl;
}

return 0;
}

...全文
187 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lowkeyfred 2009-03-25
  • 打赏
  • 举报
回复
路过看看··
debugk 2008-10-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 smallnat 的回复:]
2也是素数。你上来就把偶数全部排除是不对的。
[/Quote]
谢谢指点。
思无邪@ 2008-10-30
  • 打赏
  • 举报
回复
路过学习
帅得不敢出门 2008-10-30
  • 打赏
  • 举报
回复
for循环与 if(m%(2*i+1) == 0) 没必要多做运算

#include <iostream>
#include <cmath>

using namespace std;

int main()
{
cout << "Input a number: ";
int m;
cin >> m;

double sqrtm=sqrt(m*1.0);
if(m%2 == 0) //如果是偶数,声明不是素数并退出
cout << m << " isn't a prime." << endl;
else
{
for(int i=3; i<=sqrtm; i+=2) //除以奇数,能除尽则声明是素数并退出,否则继续循环直到结束
{
if(m%i == 0)
{
cout << m << " isn't a prime." << endl;
return -1;
}
}

cout << m << " is a prime." << endl;
}

return 0;
}
xuedaoli 2008-10-30
  • 打赏
  • 举报
回复
素数的算法有很多,要看具体的你要求的范围的。
简单的可以取素数因子,也可以去打简单的表
网上资料多的很,找下
hznat 2008-10-30
  • 打赏
  • 举报
回复
2也是素数。你上来就把偶数全部排除是不对的。

33,311

社区成员

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

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