開啟章節選單

11417 GCD

題目連結

題目敘述

給定一個整數 N,我們定義 G 為從 1 到 N 中,所有兩兩不同的整數組合 i 和 j(其中 i < j)的最大公因數(GCD)的總和

i與j的定義如下: i的範圍為 1N-1 j的範圍為 i+1N 對每一組 (i,j),計算 GCD(i,j) 將所有的 GCD(i, j) 相加,總和就是 G

輸入說明

每一行包含一個整數 N,代表需要計算 G 的上限值 當輸入為 0 時表示結束,此行不需處理 輸入最多包含 100 行 1 < N < 501

輸出說明

對於每一個輸入的 N,輸出一行對應的 G 值

解題思路

利用輾轉相除法的遞迴函式,用來計算兩個數的最大公因數

程式碼

#include <iostream>
using namespace std;

int GCD(int a,int b){
    if(a==0)return b;
    return GCD(b%a,a);
}

int main(){
    int N;
    while(cin>>N && N!=0){
        int G = 0;
        for(int i=1;i<N;i++){
            for(int j=i+1;j<=N;j++){
                G+=GCD(i,j);
            }
        }
        cout<<G<<endl;
    }
    return 0;
}