模板题,无背景
给你三个正整数,a,m,ba,m,b,你需要求:
a^b \mod mabmodm
输入格式:
一行三个整数,a,m,ba,m,b
输出格式:
一个整数表示答案
注意输入格式,a,m,ba,m,b 依次代表的是底数、模数和次数
样例1解释:
2^4 \mod 7 = 224mod7=2
输出2
数据范围:
对于全部数据:
1≤a≤10^91≤a≤109
1≤b≤10^{20000000}1≤b≤1020000000
1≤m≤10^61≤m≤106
#include<algorithm> #include<iostream> #include<cstring> #include<cstdio> #include<cmath> #include<queue> using namespace std; int a,b,m,temp,phi,ans=1; bool flag; int main(){ int i; char c; scanf("%d%d",&a,&m); temp=phi=m; for(i=2;i*i<=m;++i){ if(temp%i==0){ phi=phi-phi/i; while (temp%i==0){ temp/=i; } } } if (temp>1){ phi=phi-phi/temp; } while (!isdigit(c=getchar())); for (;isdigit(c);c=getchar()){ b=b*10+c-‘0‘; if (b>=phi){ flag=true; b%=phi; } } if (flag){ b+=phi; } for (i=20;i>=0;--i){ ans=1ll*ans*ans%m; if (b&(1<<i)){ ans=1ll*ans*a%m; } } cout<<ans; return 0; }
原文:https://www.cnblogs.com/xiongchongwen/p/11188156.html