解析:  就是要求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 }