數論學習
Posted lin88
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了數論學習相关的知识,希望对你有一定的参考价值。
歐拉函數篩法
歐拉函數:phi(i)為1到i之間與i互質的數的個數
1 int prime[N],phi[N],isprime[N]; 2 void getpri() 3 { 4 int cnt=0; 5 phi[1]=1; 6 memset(isprime,0,sizeof(isprime)); 7 for(int i=2;i<N;++i) 8 { 9 if(!isprime[i]) 10 { 11 prime[cnt++]=i; 12 isprime[i]=i;//質數條件isprime[i]==i 13 phi[i]=i-1;//質數的phi=i-1 14 } 15 for(int j=0;j<cnt&&i*prime[j]<N;++j) 16 { 17 isprime[i*prime[j]]=prime[j]; 18 if(prime[j]>=isprime[i])//保證只有i的最小質因數的把i篩掉 19 { 20 phi[i*prime[j]]=phi[i]*prime[j];//i與prime[j]不互質時 21 break; 22 } 23 else 24 phi[i*prime[j]]=phi[i]*(prime[j]-1);//i與prime[j]互質時 25 } 26 } 27 }
擴展歐幾里得
1 ll exgcd(ll a,ll b,ll &x,ll &y) 2 { 3 if(b==0) 4 { 5 x=1; 6 y=0; 7 return a; 8 } 9 else 10 { 11 ll ret=exgcd(b,a%b,y,x); 12 y-=a/b*x; 13 return ret; 14 } 15 }
以上是关于數論學習的主要内容,如果未能解决你的问题,请参考以下文章
機器學習基石 (Machine Learning Foundations) 作业1 Q18-20的C++实现(pocket)