求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;
}