快速幂
证明(m * n) % c = (m % c * n % c) % c
设m = ic + p
设n = jc + q
左式等于((ic + p) * (jc + q)) % c
化简得(ijc^2 + iqc + jpc + pq)% c = pq % c
右式等于((ic + p) % c * (jc + q) % c) %c
化简得(p * q) % c
故左式等于右式
证毕!
一.普通快速幂:
1 #include <stdio.h> 2 int main() 3 { 4 int a,b; 5 int result=1; 6 scanf("%d%d",&a,&b); 7 while(b>0) 8 { 9 if(b%2==1) 10 result=((result%1000)*(a%1000))%1000; 11 a=((a%1000)*(a%1000))%1000; 12 b=b/2; 13 } 14 printf("%d",result); 15 return 0; 16 }
二.优化后的快速幂:
1 #include <stdio.h> 2 int main() 3 { 4 int a,b; 5 int result=1; 6 scanf("%d%d",&a,&b); 7 while(b>0) 8 { 9 if(b&1)//利用位运算判断是否为奇数 10 result=((result%1000)*(a%1000))%1000; 11 a=((a%1000)*(a%1000))%1000; 12 b=b>>1; 13 } 14 printf("%d",result); 15 return 0; 16 }
本文来自博客园,作者:{scanner},转载请注明原文链接:{https://home.cnblogs.com/u/scannerkk/}

浙公网安备 33010602011771号