Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<stdlib.h>
- #define min(a,b) ((a)<(b)?(a):(b))
- int GCD(int a, int b)
- {
- do{
- if(a>b) {a^=b^=a^=b;}
- } while(b%=a);
- return a;
- }
- int f(int n, int a, int b)
- {
- int result = 0, i, j;
- result = (n-1)*(n-1);
- for (j=1; j<=n-b; j++)
- for (i=1; i<=n-a; i++)
- if (GCD(i, j)==1)
- 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));
- return result;
- }
- int F(int n)
- {
- int result = 0, tmp = 0, a, b;
- if (n==1)
- return 1;
- if (n%2)
- {
- for (a=1; a<=(n-1)/2; a++)
- result += f(n, a, a);
- for (b=1; b<=(n-1)/2; b++)
- tmp += f(n, (n+1)/2, b);
- result = 4*(result+tmp);
- tmp = 0;
- for (b=1; b<=(n-3)/2; b++)
- for (a=b+1; a<=(n-1)/2; a++)
- tmp += f(n, a, b);
- result += 8*tmp + f(n, (n+1)/2, (n+1)/2);
- }
- else
- {
- for (a=1; a<=n/2; a++)
- result += f(n, a, a);
- for (b=1; b<=(n-1)/2; b++)
- for (a=b+1; a<=n/2; a++)
- tmp += f(n, a, b);
- result = 4*result + 8*tmp;
- }
- return result;
- }
- int main(void)
- {
- int n, N=20;
- for (n=1; n<N; n++)
- {
- printf("%d,%d\n", n, F(n));
- }
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment