Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
Re:Notice~数据是不是有问题?筛素数筛了431以内wa了一下午。改成450就过了。 这是wa的代码: const int N = 500; const int M = 200; #define LL long long bool is[N]; int prm[M]; LL a[N][M], t; int getprm(int n){ int i, j, k = 0; int s, e = (int)(sqrt(0.0 + n) + 1); memset(is, 1, sizeof(is)); prm[k++] = 2; is[0] = is[1] = 0; for (i = 4; i < n; i += 2) is[i] = 0; for (i = 3; i < e; i += 2) if (is[i]) { prm[k++] = i; for (s = i * 2, j = i * i; j < n; j += s) is[j] = 0; } for ( ; i < n; i += 2) if (is[i]) prm[k++] = i; return k; } LL getx(int n, int x) {//非递归写法 LL ret = 0; while (n){ ret += n/x; n /= x; } return ret; } void init() { t = getprm(431); //把这里改成450就过了。 memset(a, 0, sizeof(a)); for (int i = 0; i <= 431; i++) for (int j = 0; j < t && i >= prm[j]; j++) a[i][j] = getx(i, prm[j]); } int main() { int n, k; init(); while (scanf("%d%d", &n, &k)!=EOF) { LL ans = 1; for (int i = 0; i < t && n >= prm[i]; i++) { LL temp = a[n][i] - a[n - k][i] - a[k][i]; ans *= (temp + 1); } printf("%lld\n", ans); } return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator