二分求幂——http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3549

View Code
#include<stdio.h>
#include<math.h>

long long mon(long long n,long long p,long long m)
{
n=n%m;
long long all=1;
while(p>0)
{
if(p&1==1)
{
all=(all*n)%m;
}

n=(n*n)%m;
p>>=1;
}
return all;
}


int main()
{
long long n,m;
while(scanf("%lld%lld",&m,&n)!=EOF)
{
long long i;
long long all=0;
for(i=1;i<=m;i++)
{
all+=mon(i,n,1000000000);
// all=all%1000000000;注销掉就不会超时了,擦
}

// printf("%I64d\n",all);
long long add=0;
while(all%10==0)
{
add++;
all=all/10;
}
printf("%lld\n",add);
}

return 0;
}

其实数后面没多少0的,mod一下

不过鉴于zoj诡异,不解释//all=all%1000000000;注销掉就不会超时了,擦

你可能感兴趣的:(online)