快速幂的递归实现 //快速幂的递归实现 //x为偶数 a^x=a^x/2*a^x/2 //x为奇数 a^x=a^x/2*a^x/2*a long long quickPow_recursion(long long a,long long x) { //递归边界 a^0=1 if(x==0) return 1; long long temp=quickPow_recursion(a,x/2); //x是偶数 if(x%2==0) return temp*temp; //x是奇数 else return temp*temp*a; } 快速幂的迭代实现 //快速幂的迭代实现 //61=(111101)2 //2^61=2^32*2^16*2^8*2^4*2 long long quickPow_iteration(long long a,long long x) { long long ans=1; while(x) { if(x&1)//取x二进制的最后一位,若为1 ans=ans*a; a=a*a; x=x>>1;//x的二进制右移一位 } return ans; } 带模快速幂 //带模快速幂 long long quickPow(long long a,long long x,long long MOD) { long long ans=1; while(x) { if(x&1) ans=ans*a%MOD; a=a*a%MOD; x=x>>1; } } 快速乘 //快速乘 a*b long long quickMul(long long a,long long b) { long long ans=0; while(b) { if(b&1)//取二进制最后一位,若为1 ans=ans+a; a=a+a; b=b>>1; } return ans; } 带模快速乘 //带模快速乘 long long quickMul(long long a,long long b,long long MOD) { long long ans=0; while(b) { if(b&1)//取二进制最后一位,若为1 ans=(ans+a)%MOD; a=(a+a)%MOD; b=b>>1; } return ans; }