快速幂
#include<bits/stdc++.h> using namespace std; //快速求幂,就是二分法 long long mod=1000000007L; long long pow1(int x,int y){ //判断奇偶,偶数返回0奇数返回1 if(y==0) return 1; long long q=pow1(x,y/2);//注意只调用一遍,否则On if(y&1) return q*q*x; else return q*q; } //带模,其实就是之前做过的,a^b mod n 的题 long long pow_mod(int x,int y,int c){ //判断奇偶,偶数返回0奇数返回1 if(y==0) return 1; long long q=pow_mod(x,y/2,c)%c;//注意只调用一遍,否则On if(y&1) return (q*q*x)%c; else return (q*q)%c; } //位运算的方式,改成迭代,根据二进制 int pow_mod_bit(int x,int y,int c){ int s=1; while (y>0) { //末尾是1 if(y&1){ s=(s*x)%c; } y>>=1; x=(x*x)%c; } return s; } int main() { cout<<pow1(2,33)<<endl; cout<<pow_mod(2,109,111)<<endl; cout<<pow_mod_bit(2,10,10)<<endl; return 0; }