欧拉函数是一个很有用的东东。可以被扩展用来解决许多与素数相关的问题,逆元问题,欧拉函数降幂等!
概念:欧拉函数是小于或等于n的正整数中与n互质的数的数目(特别地φ(1)=1),若n为质数可直接根据性质得出,否则的话要求解。
求解模板:
1 int Euler(int n) 2 { 3 if(n==1) return 1; 4 int ans=n; 5 6 for(int i=2;i*i<=n;++i) 7 { 8 if(n%i==0) 9 { 10 while(n%i==0) n/=i; 11 ans=ans/i*(i-1); 12 } 13 } 14 if(n!=1) ans=ans/n*(n-1); 15 16 return ans; 17 }
欧拉函数求逆元:51nod1256
1 #include <iostream> 2 #include <stdio.h> 3 #include <string.h> 4 using namespace std; 5 typedef long long ll; 6 int mod; 7 8 int Qpow(llo a,llo b) 9 { 10 int r=1; 11 while(b) 12 { 13 if(b&1)r=r*a%mod; 14 a=a*a%mod; 15 b>>=1; 16 } 17 18 return r; 19 } 20 21 int Euler(int n) 22 { 23 if(n==1) return 1; 24 int ans=n; 25 26 for(int i=2;i*i<=n;++i) 27 { 28 if(n%i==0) 29 { 30 while(n%i==0) n/=i; 31 ans=ans/i*(i-1); 32 } 33 } 34 if(n!=1) ans=ans/n*(n-1); 35 36 return ans; 37 } 38 39 int main() 40 { 41 int a,b; 42 cin>>a>>b; 43 mod=b; 44 45 //llo ans=Qpow(a,mod-2);// mod质数 46 int ans=Qpow(a,Euler(mod)-1); 47 cout<<ans<<endl; 48 49 return 0; 50 }
完。
原文地址:https://www.cnblogs.com/redblackk/p/9735426.html
时间: 2024-10-14 06:51:30