輸入b,p,k的值,求b^p mod k的值。其中b,p,k*k爲長整型數。c++
輸入格式:spa
三個整數b,p,k.code
輸出格式:blog
輸出「b^p mod k=s」ci
s爲運算結果it
以b==11爲例,b=>1011,二進制從右向左算,但乘出來的順序是 a^(2^0)*a^(2^1)*a^(2^3),是從左向右的。咱們不斷的讓base*=base目的便是累乘,以便隨時對ans作出貢獻。io
#include<bits/stdc++.h> using namespace std; long long b,p,k; long long mod(long long a,long long b) { long long ans=1;// 迭代記錄乘積 while(b) { if(b&1) { ans*=a; ans%=k; } a*=a;//這裏是關鍵求出了base-->base2-->base4-->base8-->base16-->base^32.......指數正是 2^i ,這豈不完美乎? a%=k; b>>=1; } return ans; } int main() { cin>>b>>p>>k; cout<<b<<'^'<<p<<" mod "<<k<<'='<<mod(b,p)%k;//b的p次方 return 0; }
# 更新注意事項:
class
注意中間的取模,被坑過一次二進制