poj1995---Raising Modulo Numbers
阿新 • • 發佈:2018-08-15
tdi pow line pac return 證明 turn 多次 namespace
tips:
1.(a*b)%c=[(a%c)*(b%c)]%c,其他的公式都是由此引出的
2.代碼裏主要是這樣處理了(a*b)%c=(a%c)*b%c
3.快速冪也叫二分冪,有遞歸寫法,判斷b的奇偶,詳見算法筆記
//long long 如果輸入不使用%lld的話,如果輸入數據超過int範圍會wa //(a+b)%c=(a%c+b%c)%c; //(a*b)%c=[(a%c)*(b%c)]%c //(a^b)%c=(a%c)^b%c---冪是多次乘法 //(a*b)%c=(a%c)*b%c //有詳細證明:https://blog.csdn.net/qq_36285879/article/details/53284431View Code#include<cstdio> using namespace std; int z; int m,h; long long ans,a,b; long long binaryPow(long long a,long long b, int m ){ long long ans=1; while(b>0){ if(b&1){ ans=ans*a%m;//(a*b)%c=(a%c)*b%c } a=a*a%m;//(a%c) b=b>>1; }return ans; } int main(){ scanf("%d",&z); while(z--){ scanf("%d%d",&m,&h); long long ans=0; for(int i=0;i<h;i++){ scanf("%lld%lld",&a,&b); ans+=binaryPow(a,b,m); } ans=ans%m; printf("%lld\n",ans); }return 0; }
poj1995---Raising Modulo Numbers