高效判断素数的算法
2014-06-23 20:00
183 查看
来求出小于等于n的所有的素数。
num = 0;
for(i=2; i<=n; i++)
{ for(j=2; j<=sqrt(i); j++)//incude<math>,其实可以避免sqrt();可以用j*j<i;来代替
if( j%i==0 ) break;
if( j>sqrt(i) ) prime[num++] = i; //这个prime[]是int型,跟下面讲的不同。
}
这就是最一般的求解n以内素数的算法。复杂度是o(n*sqrt(n))
筛法求素数
方法三:
num = 0;
for(i=2; i<=n; i++)
{ for(j=2; j<=sqrt(i); j++)//incude<math>,其实可以避免sqrt();可以用j*j<i;来代替
if( j%i==0 ) break;
if( j>sqrt(i) ) prime[num++] = i; //这个prime[]是int型,跟下面讲的不同。
}
这就是最一般的求解n以内素数的算法。复杂度是o(n*sqrt(n))
筛法求素数
#include<math.h> #include<iostream> #include <windows.h> using namespace std; bool prime [100]; void isPrime() { int i, j; for (i = 2; i < 100; i++) { prime[i] = 1; } for (i = 2; i < 100; i++) { if (prime[i]) for (j = i + i; j < 100; j += i) { prime[j] = 0; } } } int main() { isPrime(); for (int i = 1; i < 100; i++) { if (prime[i]) cout << i << endl; } system("pause"); return 0; }
方法三:
bool isPrime1(int num) { if (num == 2 || num == 3) { return true; } if (num % 6 != 1 && num % 6 != 5) { return false; } for (int i = 5; i*i <= num; i += 6) { if (num % i == 0 || num % (i + 2) == 0) { return false; } } return true; }
相关文章推荐
- 判断一个数是否为质数/素数——从普通判断算法到高效判断算法思路
- 判断一个数是否为质数/素数——从普通判断算法到高效判断算法思路
- 大素数高效算法判断
- 判断n以内的素数(高效算法)
- 判断一个数是否为质数/素数——从普通判断算法到高效判断算法思路
- 以空间换时间高效求素数算法
- 快速判断素数算法
- 判断一个数是否是素数的两种算法
- 素数判断算法-----应用
- 素数判断算法 - 拉宾-米勒测试定理(c++实现)
- 【转】费马小定理 素数判断 蒙哥马利算法
- 算法总结:判断一个数是否为素数
- 比较高效的取素数的算法
- 判断素数的算法
- [算法]高效求素数
- 算法总结:判断一个数是否为素数
- 算法每日一题:2、判断素数
- 判断素数的算法
- 判断素数的算法
- 判断一个数字是否为素数的基于C语言的算法