N
,根據定義輸出結果 G
G=0;
for(i=1;i<N;i++)
for(j=i+1;j<=N;j++)
{
G+=GCD(i,j);
}
/*Here GCD() is a function that finds
the greatest common divisor of the two
input numbers*/
int N;
while(scanf("%d", &N)){
if(N == 0){
break;
}
else{
...
}
}
G
是用 Σ 疊加,所以每筆測資都要記得先初始化 G = 0
else{
G = 0;
for(i = 1; i < N; i++){
for(j = i + 1; j <= N; j++){
G = G + GCD(i, j);
}
}
printf("%d\n", G);
}
int GCD(int a, int b){
if(b == 0){
return a;
}
else{
GCD(b, a % b);
}
}
int GCD(int a, int b){
return b == 0 ? a : GCD(b, a % b);
}
#include<stdio.h>
int GCD(int a, int b){
return b == 0 ? a : GCD(b, a % b);
}
int main(){
int G;
int N;
int i, j;
while(scanf("%d", &N)){
if(N == 0){
break;
}
else{
G = 0;
for(i = 1; i < N; i++){
for(j = i + 1; j <= N; j++){
G = G + GCD(i, j);
}
}
printf("%d\n", G);
}
}
return 0;
}
比較要注意的是我有多加一個判斷是當 a ==0 時也回傳0
但是我記得n和0的GCD就是n呀(?)
我加上這個判斷才AC(???)
G
的定義寫得很清楚,從 i = 1
開始,所以如果寫成 i = 0
開始,這圈 G
的值都不能更新,而且會導致內層多跑 N 圈