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

在本地运行,很快的,怎么会超时呢?帮忙分析一下

Posted by willard at 2007-10-06 16:51:04 on Problem 3421 and last updated at 2007-10-06 16:51:33
#include <stdio.h>
#include <math.h>
#define SIZE 100000
int maxl = 0;
int maxc = 0;

void digui(int num, const int prime[], int deep)
{
	if(num==1)
	{
		if(maxl==deep)
			maxc++;
		else if(maxl < deep)
		{
			maxl = deep;
			maxc = 1;
		}
		return;
	}
	int i = 0, j = 0, c=0;
	while(prime[i]>0)
	{
		if(num >= prime[i] && num!=0 && num%prime[i]==0)
			digui(num/prime[i], prime, deep+1);
		i++;
	}
}

void main()
{
	int num;
	while(EOF!=scanf("%d", &num))
	{
		maxl = 0;
		maxc = 0;
		if(num==0)
		{
			printf("0 0\n");
			continue;
		}
		int i, j = 0, prime[100000] = {0}, copy = num;
		for(i = 2; i<=num; i++)
		{
			int save = num;
			while(num%i==0)
			{
				num = num / i;//莫非这里导致TLE???
			}
			if(num!=save)
				prime[j++] = i;
		}
		digui(copy, prime, 0);
		if(maxl == 0)
			printf("1 1\n");
		else
			printf("%d %d\n", maxl, maxc);
	}
}

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