求兩個整數a和b的最大公約數
計算最大公約數最常見的辦法就是輾轉相除法(歐幾里德算法)
- int gcd(int a,int b)
- {
- int temp;
- while(b>0)
- {
- temp=a%b;
- a=b;
- b=temp;
- }
- return a;
- }
另一種方法:
- int gcd(int a,int b)
- {
- if(a<b)
- {
- return gcd(b,a);
- }
- if(b==0)
- {
- return a;
- }
- if(a&1)
- {
- if(b&1)
- {
- return gcd(b,a-b);
- }
- else
- return gcd(a,b>>1);
- }
- else
- {
- if(b&1)
- {
- return gcd(a>>1,b);
- }
- else
- {
- return gcd(a>>1,b>>1)<<1;
- }
- }
- }
好難懂,沒看明白是什麼原理:-(