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 |
抽搐..........TLE到死这题还要怎么优化? #include<stdio.h> #include<string.h> #define N 500 int prime[N/4] = {1,2,3,5,7,0}; int pres[N]; void make_prime() { int p, i, np = 4; bool flag; for(p = 7; p < N; p += 2) { flag = true; for(i = 2; prime[i] < p; i++) { if(!prime[i]) break; if(p % prime[i] == 0) { flag = false; break; } } if(flag) { np++; prime[np] = p; } } } void make_pres(int n, int k) { int i, j, t; for(i = n; i >(n - k); i--) { j = 0; t = i; while(t!=1) { j++; while(t%prime[j] == 0) { pres[j]++; t /= prime[j]; } } } for(i = 2; i <= k; i++) { j = 0; t = i; while(t != 1) { j++; while(t%prime[j] == 0) { pres[j]--; t /= prime[j]; } } } } int main() { int i, n, k; __int64 sum; make_prime(); while(scanf("%d%d",&n,&k) != EOF) { memset(pres,0,sizeof(pres)); make_pres(n,k); sum = 1; for(i = 1; i <= n; i++) { if(pres[i]) sum *= (pres[i] + 1); } printf("%I64d\n",sum); } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator