欧拉筛板子

#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;
}

 

posted on 2022-05-05 15:27  zesure  阅读(17)  评论(0编辑  收藏  举报

导航