1. 程式人生 > >線性篩+快速乘

線性篩+快速乘

線性篩

int prime[N]; //素數表下標從1開始
bool mark[N]; //mark[i]==1表示i不是素數
int tot; 
void get_list(int n){   
    mark[1] = 1;
    for(int i = 2;i <= n;i ++){
        if(!mark[i]) prime[++tot] = i;
        for(int j = 1;j<=tot&&prime[j]*i<=n;j ++){
            mark[i*prime[j]] = 1;
            if
(!i%prime[j]) break; } } }

快速乘

inline ll mul(ll a,ll b,ll m){
     ll c = a*b-(ll)((long double)a*b/m+0.5)*m; 
     return c<0 ? c+m : c; 
}