|
|
back to boardI think I have problem with the __int64 type. Can anyone help me? Posted by Kolio 29 Apr 2003 19:46 I've solved this problem in two different ways. I've tested the both sollutions on my computer (I use Visual C++ 6.0) and they give the same results on all the possible tests, but this one give WA and the other is ACC. What's the problem with this? Maybe the __int64 type? Can anyone help me? #include <stdio.h> #define N 64 int k,s; int prime[] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53}; __int64 nad[N][N]; //nad[i][j] is the number of the subsets with j elements of a set //with i elements void initnad(void) { nad[1][0] = nad[1][1] = 1; for(int i = 2; i<=s; i++) { nad[i][0] = nad[i][i] = 1; for(int j=1; j<i; j++) nad[i][j] = nad[i-1][j] + nad[i-1][j-1]; } } bool hassquare(int a) { for(int i=0; prime[i]*prime[i] <= a; i++) if( a% (prime[i]*prime[i]) == 0 ) return 1; return 0; } int doit(void) { __int64 res = 0; for(int i=2; i<=s; i++) { if( hassquare(i) ) continue; __int64 cur = nad[s/i][k]; int dels = 0; for(int j=0; prime[j]<=i; j++) dels += !(i%prime[j]); if( dels%2 ) res += cur; else res -= cur; } res = (res>10000)?10000:res; return (int)res; } int main(void) { scanf("%d%d", &k, &s); initnad(); printf("%d\n", doit()); return 0; } |
|
|