ADV-1117 超级快速幂(数论)
问题描述
给出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;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】