C語言輾轉相除/相減法(歐幾里得演算法)求最大公約數和最小公倍數
阿新 • • 發佈:2018-12-02
#include <stdio.h>
#include <stdlib.h>
//題目:輸入兩個正整數m和n,求其最大公約數和最小公倍數。
//採用任何兩種演算法來完成上述題目,並比較2種演算法的時間複雜度和空間複雜度。
int main()
{
int m,n;
printf("請輸入正整數m和n:\n");
scanf("%d%d",&m,&n);
//printf("最大公約數為:%d\n",gcd(m,n));
//printf("最小公倍數為:%d\n",m*n/gcd(m,n));
printf("最大公約數為:%d\n" ,gys(m,n));
printf("最小公倍數為:%d\n",m*n/gys(m,n));
return 0;
}
//輾轉相除法 O(lgn)
int gcd(int m, int n)
{
if(n == 0){
return m;
}else{
return gcd(n,m%n);
}
}
//輾轉相減法 O(lgn)
int gys(int m,int n){
int t;
if(m<n){
t = m;
m = n;
n = t;
}
if (m==n){
return m;
}else{
return gys(m-n,n);
}
}