阿摩線上測驗 登入

申論題資訊

試卷:104年 - 104年地方四等-程式設計概要#35322
科目:程式設計
年份:104年
排序:0

申論題內容

七、請用非遞迴的方式,寫出一副程式 gcd(int m, int n),藉以求出兩整數 m 與 n 之間的 最大公因數。(8 分)

詳解 (共 2 筆)

詳解 提供者:hchungw
求兩個整數
m和n之間的最大公因數(Greatest Common Divisor,GCD)可以使用輾轉相除法(也稱為歐幾裏得演算法)。這種方法基於一個事實:兩個整數的最大公因數等於其中較小數和兩數相除餘數的最大公因數。以下是一個使用非遞歸方式實現的gcd函數示例:
#include <stdio.h>
int gcd(int m, int n) {
    while (n != 0) {
        int temp = n;
        n = m % n;
        m = temp;
    }
    return m;
}
int main() {
    int m, n;
    printf("Enter two integers: ");
    scanf("%d %d", &m, &n);
    printf("The Greatest Common Divisor of %d and %d is %d.\n", m, n, gcd(m, n));
    return 0;
}
在這個實現中,我們在一個while迴圈中不斷地將n賦值為m % n(m除以n的餘數),並將m賦值為n的舊值,直到n為0。在n變為0時,m就是兩個數的最大公因數。這個方法簡潔而有效,避免了遞歸可能引起的棧溢出問題,並且在計算大數的GCD時更為高效。
詳解 提供者:肉圓室友

int GCD(int m,int n){
    int c;
    while(n){
        c=m%n;
        m=n;
        n=c;
    }
    return m;
}