求a的b次幂:快速幂运算
求a b的最大公约数:辗转相除法
#include<bits/stdc++.h>
using namespace std;
//快速幂运算
long pow(int a,int b){//求 a的b次幂
long x=a;
long res=1;
while(b>0){
if(b&1){
res*=x;
}
b=b>>1;// 右移一位 2进制
x=x*x;
}
return res;
}
//最大公约数 经典模板
// 辗转相除法 两个正整数a和b(a>b),它们的最大公约数等于a除以b的余数c和b之间的最大公约数。比如10和25,25除以10商2余5,那么10和25的最大公约数,等同于10和5的最大公约数。
int gcd(long a,long b){// a<b
if(b==0)
{return a;
}
return gcd(b,a%b);
// return b==0?a:gcd(b,a%b); //一行代码实现
}
int main()
{
cout<<gcd(pow(2,20)-1,pow(2,19))<<'\n';
cout<<pow(2,20)-1<<"/"<<pow(2,19)<<'\n';
//更快捷的方式
// long a=1<<19;
// long b=a<<1;
// cout<<b-1<<"/"<<a<<'\n';
return 0;
}