Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

为什么这样都TLE?

Posted by 875600 at 2006-12-07 19:24:13 on Problem 2992
为什么这样都TLE?在自己的机子上都很快。。。。
#include<stdio.h>
#include<math.h>
int f(int n)
{
	if(n==1)
		return 0;
	else if(n==2)
		return 1;
	else
	{
		if(n%2==0)
			return 0;
		else
		{
			int i,t;
			t=0;
			for(i=3;i<=sqrt(n);i=i+2)
			{
				if(n%i==0)
				{
					t=1;
					break;
				}
			}
			if(t==0)
				return 1;
			else
				return 0;
		}
	}
}

void main()
{
	int i,j,n,m,k,a[84],p,num[431][84],s[84],sum[84];
	_int64 total;
	k=0;
	for(i=1;i<=431;i++)
	{
		if(f(i)==1)
			a[k++]=i;
	}
	for(i=0;i<431;i++)
	{
		for(j=0;j<84;j++)
		{
			num[i][j]=0;
		}
	}
	for(i=1;i<=431;i++)
	{
		for(j=0;j<k;j++)
		{
			if(a[j]<=i)
			{
				if(i%a[j]==0)
				{
					p=i;
					while(p%a[j]==0)
					{
						num[i-1][j]++;
						p=p/a[j];
					}
				}
			}
			else
				break;
		}
	}
	
		while(scanf("%d %d",&n,&m)!=EOF)
		{
			if(m>(n-m))
				m=n-m;
			total=1;
			for(i=0;i<84;i++)
			{
				sum[i]=0;
				s[i]=0;
			}
			for(i=n;i>n-m;i--)
			{
				for(j=0;j<k;j++)
				{
					sum[j]+=num[i-1][j];
				}
			}
			for(i=m;i>=1;i--)
			{
				for(j=0;j<k;j++)
				{
					s[j]+=num[i-1][j];
				}
			}
			for(i=0;i<84;i++)
			{
				if((sum[i]-s[i])>0)
					total*=(sum[i]-s[i]+1);
			}
			printf("%I64d\n",total);
		}
	
}





Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator