版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_30358129/article/details/82628238
线性筛
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;
}