题目描述
给你三个整数 a,b,p,求 a^b mod p。
输入格式
输入只有一行三个整数,分别代表 a,b,p。
输出格式
输出一行一个字符串 a^b mod p=s
,其中 a,b,p 分别为题目给定的值, s 为运算结果。
输入输出样例
输入
2 10 9
输出
2^10 mod 9=7
说明/提示
样例解释
= 1024,1024 mod 9 = 7。
数据规模与约定
对于 100% 的数据,保证 ,a+b>0,
第一版代码(暴力:未AC:24分)
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int main()
{
long long int a,b,p,s;
long long int i,ans=1;
cin>>a>>b>>p;
for(i=1;i<=b;++i)
{
ans*=a; //ans=ans*a;
}
s=ans%p;
cout<<a<<"^"<<b<<" mod "<<p<<"="<<s;
return 0;
}
测试结果:
错误原因:1. 循环次数太大,long long int 也不够存储结果导致WA;
2. 循环次数多导致超时;
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int main()
{
long long int a,b,p,s,x,y;
long long int i,ans=1;
cin>>a>>b>>p;
x=a;y=b;
if(b==0) ans=1;
while(b>0)
{
if(b & 1)
{
ans=(ans*a)%p;
}
a=a*a%p;
b=b/2;
}
s=ans%p;
cout<<x<<"^"<<y<<" mod "<<p<<"="<<s;
return 0;
}