1
快速幂
#include<stdio.h>
long long quickm(long long a,long long b)
{
long long ans=1;
long long bns=a;
while(b)
{
if(b&1) //位运算
ans=ans*bns%1000;
bns=bns*bns%1000; //累乘
b>>=1;
}
return ans%1000;
}
int main()
{
long long a,b;
scanf("%lld%lld",&a,&b);
printf("%lld\n",quickm(a,b));
return 0;
}**
**对于快速幂的去模问题用到定理:积的模=各因子取模的积的取模。
针对这周训练题的代码 还有比较难的前三位取模问题:
{
int d;
int k;
double j;
k=b*log10(a);
j=2+b*log10(a);
d=pow(10,j-k);
}
3
总的代码(AC)
#include<stdio.h>
#include<math.h>
long long quickm(long long a,long long b)
{
long long ans=1;
long long bns=a;
while(b)
{
if(b&1)
ans=ans*bns%1000;
bns=bns*bns%1000;
b>>=1;
}
return ans%1000;
}
int main()
{
long long a,b;
int t,k;
scanf("%d",&t);
int h=1;
while(t--)
{
scanf("%lld%lld",&a,&b);
long long c;
c=quickm(a,b);
int d;
int k;
double j;
k=b*log10(a);
j=2+b*log10(a);
d=pow(10,j-k);
printf("Case %d: %d %03lld\n",h++,d,c);
}
return 0;
}