kkmomo

A077435 - OEIS

May 19th, 2013
153
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.13 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3.  
  4. #define min(a,b) ((a)<(b)?(a):(b))
  5.  
  6. int GCD(int a, int b)
  7. {
  8.     do{
  9.         if(a>b) {a^=b^=a^=b;}
  10.     } while(b%=a);
  11.     return a;
  12. }
  13.  
  14. int f(int n, int a, int b)
  15. {
  16.     int result = 0, i, j;
  17.     result = (n-1)*(n-1);
  18.     for (j=1; j<=n-b; j++)
  19.         for (i=1; i<=n-a; i++)
  20.             if (GCD(i, j)==1)
  21.                 result += (min((n-a)/i,(n-b)/j)+min((a-1)/i,(b-1)/j)) * (min((n-b)/i,(a-1)/j)+min((b-1)/i,(n-a)/j));
  22.     return result;
  23. }
  24.  
  25. int F(int n)
  26. {
  27.     int result = 0, tmp = 0, a, b;
  28.     if (n==1)
  29.         return 1;
  30.     if (n%2)
  31.     {
  32.         for (a=1; a<=(n-1)/2; a++)
  33.             result += f(n, a, a);
  34.         for (b=1; b<=(n-1)/2; b++)
  35.             tmp += f(n, (n+1)/2, b);
  36.         result = 4*(result+tmp);
  37.         tmp = 0;
  38.         for (b=1; b<=(n-3)/2; b++)
  39.             for (a=b+1; a<=(n-1)/2; a++)
  40.                 tmp += f(n, a, b);
  41.         result += 8*tmp + f(n, (n+1)/2, (n+1)/2);
  42.     }
  43.     else
  44.     {
  45.         for (a=1; a<=n/2; a++)
  46.             result += f(n, a, a);
  47.         for (b=1; b<=(n-1)/2; b++)
  48.             for (a=b+1; a<=n/2; a++)
  49.                 tmp += f(n, a, b);
  50.         result = 4*result + 8*tmp;
  51.     }
  52.     return result;
  53. }
  54.  
  55. int main(void)
  56. {
  57.     int n, N=20;
  58.     for (n=1; n<N; n++)
  59.     {
  60.         printf("%d,%d\n", n, F(n));
  61.     }
  62.     system("pause");
  63.     return 0;
  64. }
Advertisement
Add Comment
Please, Sign In to add comment