1.エリクセンふるい法
理論的根拠:小から複数素数一般的な雑草うちのそれぞれの
数はすぐにそれの前の画面数でない場合は、それは素数でなければなりません。
理由:それは2の前ではない〜P-1の数の任意の倍数で、それは素数であります
時間の複雑さ:N *ログ(ログ(n))は、ほぼ直線
const int N = 1e6+5;
bool isprime[N];
int prime[N];
int cnt;
void init(int n)
{
isprime[1]=true;
for(int i=2;i<=n;i++)
{
if(!isprime[i])
{
prime[++cnt]=i;
for(int j=i+i;j<=n;j+=i)
isprime[j]=true;
}
}
}
2.リニアふるいです
理論的根拠:これは、各番号が一度にスクリーニングされ、のみ選別各素因数の最小数であり、時間の複雑さはO(N)であります
const int N = 1e6+5;
bool isprime[N];
int prime[N];
int cnt;
void init(int n)
{
isprime[1]=true;
for(int i=2;i<=n;i++)
{
if(!isprime[i])
prime[cnt++]=i;
for(int j=0;prime[j]<=n/i;j++)
{
isprime[prime[j]*i]=true;
if(i%prime[j]==0)
break;
}
}
}