素数筛
1 void daa() 2 { 3 int k=0; 4 for(int i=2;i<100000;i++) 5 { 6 if(x[i]==0) 7 { 8 prime[k]=i; 9 for(int j=i*2; j<100000; j+=i) 10 x[j]=1; 11 k++; 12 } 13 } 14 }
//黑历史不忍卒睹 const int N = 1e6 + 10; int prime[N]; int cnt = 0; //O(n*loglogn) void pri() { memset(vis, 0, sizeof(vis)); for(int i = 2; i < N; i++) { if(!vis[i]) { for(int j = i + i; j < N; j += i) if(!vis[j]) vis[j] = 1; prime[cnt++] = i; } } } //O(n) void Sieve() { memset(vis, 0, sizeof(vis)); for(int i=2;i<N;i++) { if(!vis[i]) prime[cnt++]=i; for(int j = 0; j < cnt && i * prime[j] < N; j++) { vis[i * prime[j]] = 1; if(0 == (i % prime[j])) break; } } }