欧拉筛板子
#pragma GCC optimize(2) #pragma GCC optimize(1) #include<bits/stdc++.h> typedef long long ll; typedef unsigned long long ull; const ull base=131; #define MAX 10000009 #define PI 3.141592653589793 using namespace std; int prime[MAX]; bool mark[MAX]; int olpri(int num) { int cnt=0; for(int i=2;i<num;i++) { if(!mark[i]) prime[cnt++]=i; for(int j=0;(prime[j]*i<num)&&(j<num);j++){ mark[i* prime[j]]=true; if (i% prime[j]==0) break; } } return cnt; } int main() { int len=olpri(1000000);//会筛掉该区域内小于这个数的所有素数 for(int i=0;i<len;i++) { cout<<prime[i]<<' '; } cout<<endl; }
线性筛处理质因子
for (int i = 2; i < N; i++)minp[i] = i; int cnt = 0; for (int i = 2; i < N; i++) { if (minp[i] == i) prime[cnt++] = i; for (int j = 0; j < cnt && prime[j] * i < N; j++) { minp[prime[j] * i] = prime[j]; if (i % prime[j] == 0) break; } } while (num != 1) { int p = minp[num]; // work num /= p; }