解析: 就是要求GCD greatest common divisor ,最大公约数,利用欧几里得的高效算法。
1 #include<stdio.h> 2 static int gcd(int a,int b); 3 int main() 4 { 5 int n, i, j, g; 6 while(scanf("%d", &n) == 1 && n){ 7 g = 0; 8 for(i = 1; i < n; i++) 9 for(j = i + 1; j <= n; j++) 10 g += gcd(i, j); 11 printf("%d\n", g); 12 } 13 return 0; 14 } 15 static int gcd(int a,int b) 16 { 17 int n, m, t; 18 if(a < b){ 19 t = a; 20 a = b; 21 b = t; 22 } 23 n = a; 24 m = b; 25 while(m != 0){ 26 t = n % m; 27 n = m; 28 m = t; 29 } 30 return n; 31 }
1 #include<stdio.h> 2 static int gcd(int a,int b); 3 int main() 4 { 5 int n, i, j, g; 6 while(scanf("%d", &n) == 1 && n){ 7 g = 0; 8 for(i = 1; i < n; i++) 9 for(j = i + 1; j <= n; j++) 10 g += gcd(i, j); 11 printf("%d\n", g); 12 } 13 return 0; 14 } 15 static int gcd(int a,int b) 16 { 17 int n, m, t; 18 if(a < b){ 19 t = a; 20 a = b; 21 b = t; 22 } 23 n = a; 24 m = b; 25 while(m != 0){ 26 t = n % m; 27 n = m; 28 m = t; 29 } 30 return n; 31 }