時間限制:1 秒
內存限制:32 兆
特殊判題:否
- 題目描述:
-
輸入兩個正整數,求其最大公約數。
- 輸入:
-
測試數據有多組,每組輸入兩個正整數。
- 輸出:
-
對於每組輸入,請輸出其最大公約數。
- 樣例輸入:
-
49 14
- 樣例輸出:
-
7
思路:歐幾里得算法
兩個結論:1.a,b的公約數同時也必是b,a mod b的公約數
2.a,b的最大公約數同時也必是b,a mod b的最大公約數
過程:若a,b全爲零則它們的最大公約數不存在;若a,b其中之一爲零,則它們的最大公約數爲a,b中非零的那個;若a,b都不爲零,則使新a=b,新b=a%b然後重複該過程
方法一:非遞歸
#include <stdio.h>
int main(){
int a,b;
while(scanf("%d %d",&a,&b)==2){
while(b>0){
int tmp;
tmp = b;
b = a%b;
a = tmp;
}
printf("%d\n",a);
}
return 0;
}
/**************************************************************
Problem: 1056
User: zpy
Language: C++
Result: Accepted
Time:0 ms
Memory:1020 kb
****************************************************************/
方法二:遞歸
#include <stdio.h>
int gcd(int a,int b){
if(b==0)
return a;
else return gcd(b,a%b);
}
int main(){
int a,b;
while(scanf("%d %d",&a,&b)==2){
printf("%d\n",gcd(a,b));
}
return 0;
}
/**************************************************************
Problem: 1056
User: zpy
Language: C++
Result: Accepted
Time:0 ms
Memory:1020 kb
****************************************************************/