法一:枚举法。
输入两个数a,b。求a,b的最大公约数。
1.设t为2。
2.如果a和b都能被t整除,则记下这个t。
3.t加1后重复第二步,直到t等于a或b。
4.那么,曾经记下的最大的可以同时整除a和b的t就是最大公约数。
#include<stdio.h>
int main(){
int a,b;
int min;
int ret=0;
scanf("%d %d",&a,&b);
if(a>b){
min=b;
}else{
min=a;
}
for(int i=1;i<=min;i++){
if(a%i==0&&b%i==0){
ret=i;
}
printf("%d与%d的最大公约数是:%d",a,b,ret);
return 0;
}
法二:辗转相除法(又名欧几里得算法)。
输入a和b,t定义为余数。
a b t (a%b=t)
12 8 4
8 4 0
4 0
用较大的数对较小的数取余,然后第二次取余的被除数等于前一次取余的除数,直至除数为0,即余数为0。
#include<stdio.h>
int main(){
int a,b,t;
scanf("%d %d",&a,&b);
while(b!=0){
t=a%b;
a=b;
b=t;
}
printf("最大公约数为:%d",a);
return 0;
}