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 pengnix at 2011-05-01 16:35:24 on Problem 3421
#include <stdio.h>
#include <math.h>
long long X;
typedef struct{
	long long value;
	int count;
}Num;
Num Num1[6];//开到6足够了
int primernum=0;
void chuli(long long x)
{
	int flag=0;
	int i=2;
	int max=ceil(sqrt(double(x)));
	while(x>1)
	{
		if(i>max){Num1[primernum].value=x;Num1[primernum].count=1;primernum++;break;}//没有这个判断容易tle
		flag=0;
		if(x%i==0){flag=1;Num1[primernum].value=i;Num1[primernum].count=0;}
		while(x%i==0){

			x=x/i;
			Num1[primernum].count++;
		}
		if(flag==1)primernum++;
		if(i>2)i=i+2;
		else i++;

	}
}
int com(int n,int r)
{
	if(n-r>r)r=n-r;
	int i,j,s=1;
	for(i=0,j=1;i<r;i++)
	{
		s*=(n-i);
		for(;j<=r&&s%j==0;++j)s/=j;
	}
	return s;
	}
int main() {
	while(scanf("%lld",&X)!=EOF)
	{
		primernum=0;
		chuli(X);
		int sum=0;
		int ans=1;
		for(int i=0;i<primernum;i++)
		{
			sum+=Num1[i].count;
			ans=ans*com(sum,Num1[i].count);
		}
		printf("%d %d\n",sum,ans);
	}
	return 0;
}

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