码迷,mamicode.com
首页 > 其他好文 > 详细

數論學習

时间:2018-11-03 23:08:50      阅读:119      评论:0      收藏:0      [点我收藏+]

标签:turn   else   pre   set   sizeof   ++   class   return   void   

歐拉函數篩法

歐拉函數: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 }

 

數論學習

标签:turn   else   pre   set   sizeof   ++   class   return   void   

原文地址:https://www.cnblogs.com/Lin88/p/9902177.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!