| ||||||||||
| 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的程序In Reply To:为何这个程序过了?但是下面那个TLE?不理解,希望有牛给个解释 Posted by:mixter at 2006-09-16 18:32:23 #include <iostream>
using namespace std;
#define MAX 300
#define MAXP (2*MAX+1)
__int64 n,k;
int primes[MAXP],isprime[MAXP];
__int64 ans[500][500];
__int64 factpow(int n,int p)
{
if(ans[n][p]!=-1) return ans[n][p];
__int64 d=0;
do
{
n /= p;
d += n;
}while(n);
ans[n][p]=d;
return d;
}
__int64 ndivs(int n,int k)
{
__int64 i,ad;
__int64 nd=1;
for(i = 0; primes[i] <= n; i++)
{
ad = factpow(n,primes[i]) - factpow(k, primes[i]) - factpow(n-k,primes[i]);
nd *= (ad + 1);
}
return nd;
}
int main()
{
//freopen("test.txt","r",stdin);
int n,k,i,j;
isprime[1]=1;
n = 0;
for(i = 2;i < MAXP; i++)
if(!isprime[i])
{
primes[n++] = i;
for(j = 2 * i; j < MAXP; j += i)
isprime[j] = 1;
}
// memset(ans,0,sizeof(ans));
for(n=0;n<=450;n++)
{
for(k=0;k<=450;k++)
ans[n][k]=-1;
}
while(scanf("%d%d",&n,&k)==2)
{
printf("%I64d\n",ndivs(n,k));
}
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator