快速幂乘法——SGU 117Counting

如将50倍化为二进制110010
对应32 16 8 4 2 1 
就是50是由32+16+2组成(加法)
而推广到乘法里2^50=(2^32)*(2^16)*(2^2)=2^(32+16+2)
View Code
#include<stdio.h>

int main()
{
int n,m,k;
scanf(
"%d%d%d",&n,&m,&k);
int i,add=0,t,j;
for(i=1;i<=n;i++)
{
__int64 all,rall
=1;
scanf(
"%d",&t);
all
=t;
int count=0;
for(j=1;j<=m;j=j*2)
{
if(j==1)
all
=t;
else
all
=all*all;
if(m&(1<<count))
{
rall
=rall*all;
if(rall%k==0)
{
add
++;
break;
}
rall
=rall%k;
}
all
=all%k;
count
++;
}
}
printf(
"%d\n",add);
}
原文地址:https://www.cnblogs.com/huhuuu/p/2011154.html