从网上找了两个快速打表的模板,用了好几次应该没什么问题,贴在博客上以防万一,原理什么的还没搞懂…能用就行
第一个:
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+5;
bool prime[101000000];//prime是true的是素数
int ans[100000000];//ans从1开始是素数
void init_prim()
{
memset(ans, 0, sizeof(ans));
memset(prime, true, sizeof(prime));
int num = 0;
for (int i = 2; i <= maxn; ++i)
{
if (prime[i] == true)
{
num++;
ans[num] = i;
}
for (int j = 1; ((j <= num) && (i * ans[j] <= maxn)); ++j)
{
prime[i * ans[j]] = false;
if (i % ans[j] == 0) break; //µã¾¦Ö®±Ê
}
}
prime[0]=prime[1]=false;
}
int main()
{
init_prim();
return 0;
}
第二个:
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+5;
vector<int>prime(maxn,1),ans(maxn,0);//ans从0开始是素数
//prime中等于1的是素数,ans中存的是从小到大的素数
void isprime()
{
int cnt=0;
for(int i=2;i<maxn;i++) {
if(prime[i]) {
ans[cnt++]=i;
for(int j=i*2;j<maxn;j+=i) {
prime[j]=0;
}
}
}
prime[0]=prime[1]=0;
return ;
}
int main()
{
isprime();
return 0;
}