幂运算
1、整数的快速幂
a^b%m当b还不是很大的时候
(a%m)……%m
int mod(int a,int b,int m){ int ans=1,i; for(i=1;i<=b;i++){ ans=ans*a%m; } return ans; }
但是a,b太大可能存不下,所以这里介绍一种利用二分的思想
2、把指数b表示成相应的二进制形式
是0的位不给予考虑,
long long mod(long long a,long long b,long long m){ long long ans=1; while(b){ if(b&1){ ans=(ans*a)%m; b--; } b/=2; a=a*a%m; } return ans; }
另外一种是递归的方法
long long mod(long long a,long long b,long long m){ if(b==1) return a%m; if(b%2) return mod(a*a%m,b/2,m)*a%m; else return mod(a*a%m,b/2,m)%m; }