開啟章節選單
11417 GCD
題目連結
題目敘述
給定一個整數 N,我們定義 G 為從 1 到 N 中,所有兩兩不同的整數組合 i 和 j(其中 i < j)的最大公因數(GCD)的總和
i與j的定義如下:
i的範圍為:1到N-1
j的範圍為:i+1到N
對每一組 (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; s for (int i = 1; i < N; i++) { for (int j = i + 1; j <= N; j++) { G += GCD(i, j); } } cout << G << endl; } return 0; }