#include<iostream> #define MAXN 1000010 usingnamespacestd; int chk[MAXN]={0}; int p[MAXN]={0}; intmain(){ int t=0; for (int i=2;i<MAXN;i++){ if (!chk[i]) p[t++]=i; for (int j=0;j<t&& i*p[j]<MAXN;j++) { chk[i*p[j]] = 1; } } }
思路:首先将所有2的倍数标为1,再将所有3的倍数标为1……以此类推。
欧拉筛
1 2 3 4 5 6 7 8 9 10 11 12 13
#define MAXN 1000000 int chk[MAXN]={0}; int p[MAXN]={0}; intmain(){ int t=0; for (int i=2;i<MAXN;i++){ if (!chk[i]) p[t++]=i; for (int j=0;j<t&& i*p[j]<MAXN;j++) { chk[i*p[j]] = 1; if (i%p[j]==0) break; } } }