来求出小于等于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;
}