数论

0、目录

逆元、筛法

1、逆元

1.1、打表预处理:

inv[i]=(MOD-MOD/i)*inv[MOD%i]%MOD;
转自:http://blog.csdn.net/whyorwhnt/article/details/19169035

2、筛法

2.1、筛法求素数:

const int maxn=1e7+10;
const int maxp=7e5;

int vis[maxn];
int prime[maxp];

void sieve(int n){
int m=(int)sqrt(n+0.5);
memset(vis,0,sizeof(vis));
for(int i=2;i<=m;i++) if(!vis[i]){
for(int j=i*i;j<=n;j+=i) vis[j]=1;
}
}

int gen_primes(int n){
sieve(n);
int tot=0;
for(int i=2;i<=n;i++) if(!vis[i]){
prime[tot++]=i;
}
return tot;
}

2.2、筛法求欧拉phi函数值:

//求phi(n);
int euler_phi(int n){
int m=(int)sqrt(n+0.5);
int ans=n;
for(int i=2;i<=m;i++) if(n%i0){
ans=ans/i*(i-1);
while(n%i
0) n/=i;
}
if(n>1) ans=ans/n*(n-1);
return ans;
}

//求phi[x],x=1,...,n
void phi_table(int n,int* phi){
for(int i=2;i<=n;i++) phi[i]=0;
phi[1]=1;
for(int i=2;i<=n;i++) if(!phi[i]){
for(int j=i;j<=n;j+=i){
if(!phi[j]) phi[j]=j;
phi[j]=phi[j]/i*(i-1);
}
}
}

posted @ 2016-08-09 20:21  fenicnn  阅读(177)  评论(0)    收藏  举报