1. 程式人生 > >C語言輾轉相除/相減法(歐幾里得演算法)求最大公約數和最小公倍數

C語言輾轉相除/相減法(歐幾里得演算法)求最大公約數和最小公倍數

#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); } }