洛谷——P1226 取余運算||快速冪
阿新 • • 發佈:2017-11-19
adg tdi ring span region 復制 ios ostream 結果
快速冪取膜版
P1226 取余運算||快速冪
題目描述
輸入b,p,k的值,求b^p mod k的值。其中b,p,k*k為長整型數。
輸入輸出格式
輸入格式:
三個整數b,p,k.
輸出格式:
輸出“b^p mod k=s”
s為運算結果
輸入輸出樣例
輸入樣例#1: 復制2 10 9輸出樣例#1: 復制
2^10 mod 9=7
快速冪取膜版
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define LL long long using namespace std; LL a,b,p,ans; LL read() { LL x=0,f=1; char ch=getchar(); while(ch<‘0‘||ch>‘9‘){if(ch==‘-‘)f=-1;ch=getchar();} while(ch>=‘0‘&&ch<=‘9‘) x=x*10+ch-‘0‘,ch=getchar(); return x*f; } LL multi(LL a,LL b,LL p) { LL aa=0; while(b) { if(b&1) aa=(aa+a)%p; a=a*2%p,b>>=1; } return aa; } LL qpow(LL a,LL b,LL p) { LL res=1; while(b) { if(b&1) res=multi(res,a,p); a=multi(a,a,p),b>>=1; } return res; } int main() { a=read(),b=read(),p=read(); ans=qpow(a,b,p); printf("%lld^%lld mod %lld=%lld",a,b,p,ans); return 0; }
洛谷——P1226 取余運算||快速冪