题目描述
输入b,p,k的值,求b^p mod k的值。其中b,p,k*k为长整型数。
输入输出格式
输入格式:
三个整数b,p,k.
输出格式:
输出“b^p mod k=s”
s为运算结果
作为初学者,还是应当用简洁的方法和代码(我认为很简洁),废话不说,直接看代码:
1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 using namespace std; 5 long long x(long long int a,long long int b,long long int c)//设一个小小的函数 6 { 7 long long s=1,i=a; 8 while(b!=0)//十分的明确(当b不为0时,该题才继续进行) 9 { 10 if(b&1)//按位与1,(系统内直接转化2进制(至于按位与不会的,寄几去学)) 11 { 12 s=s*i%c; 13 } 14 b=b>>1;//右移一位 15 i=i*i%c; 16 } 17 return s%c;//取余 18 } 19 int main() 20 { 21 long long int b,p,k,s; 22 cin>>b>>p>>k; 23 s=x(b,p,k); 24 cout<<b<<"^"<<p<<" "<<"mod"<<" "<<k<<"="<<s;//按题目输出 25 return 0; 26 }
至于代码中的多次取余,则是害怕结果爆炸而提前防备(不怕寄几试试)(至于为什么,则是乘法分配律了)
若还有不懂的(我也无能为力了)