【正睿多校联盟Day4 T4 简单的数论题】
题目名有毒
由于并没有系统地开始学习数论,所以数论题基本靠暴力。
然鹅本题的题解相当简单:
emmm....我当你没说
一个简单易懂的方法是这样的:
1. 欧拉定理的推论
若正整数a,n互质,则对于任意正整数b,有 a^b≡a^(b mod φ(n)) (mod n)
2.欧拉函数
我们用1~n中与n互质的数的个数称为n的欧拉函数。
欧拉函数我们用φ(n)表示。
特殊地,当n为质数时,φ(n)=n-1.
那么我们可以综合以上知识
先求出b^c mod (p-1) ,再用快速幂求出a^(b^c mod (p-1))%p.
code
1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 ll a,b,c,p; 5 ll ksm(ll x,ll y,ll moder) 6 { 7 ll ans=1; 8 while(y) 9 { 10 if(y&1) ans=ans*x%moder; 11 y>>=1; 12 x=x*x%moder; 13 } 14 return ans; 15 } 16 int main() 17 { 18 scanf("%lld%lld%lld%lld",&a,&b,&c,&p); 19 ll tmp=ksm(b,c,p-1); 20 printf("%lld",ksm(a,tmp,p)); 21 return 0; 22 }
独立意志与自由思想是必须争的,且须以生死力争。