您的位置:首页 > 其它

高效判断素数的算法

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))

筛法求素数

#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: