| ||||||||||
| 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 | |||||||||
在本地运行,很快的,怎么会超时呢?帮忙分析一下#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: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator