标签:ADV 数论 res LL qmi int 1117 rem mod
问题描述
给出a,b,c。令p=1000000007, z=b^c, y=a^z, x=y mod p。请求出x。
输入格式
三个整数分别是a,b,c
输出格式
请输出x
数据规模和约定
abc都不超过10^9
思路
不能使用a^(b^c%mod)%mod
考虑费马小定理
当a和p互质时, a ^ (p - 1) % p = 1
最后的结论是a^(b^c) % mod = a^(b^c%(mod - 1)) % mod
先是一个结论:a = b * (a / b) + a % b
div = (b ^ c) / (mod - 1)
rem = (b ^ c) % (mod - 1)
则a^(b^c) % mod = a ^ ((mod - 1) * div + rem) % mod
由于a小于1e9,mod=1e9+7, mod是质数,a和mod互质,满足费马小定理
所以,a^(b^c) % mod = a ^ rem % mod
#include <iostream>
using namespace std;
const int p = 1000000007;
typedef long long LL;
int qmi(int a, int k, int mod)
{
int res = 1;
while(k)
{
if(k & 1)
{
res = (LL)res * a % mod;
}
a = (LL)a * a % mod;
k >>= 1;
}
return res;
}
int main()
{
int a, b, c;
cin >> a >> b >> c;
int z = qmi(b, c, p - 1);
int y = qmi(a, z, p);
cout << y;
return 0;
}
标签:ADV,数论,res,LL,qmi,int,1117,rem,mod 来源: https://www.cnblogs.com/Hfolsvh/p/15966300.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。