ICPC 2010 regionals 是一个问题。
问题名称:方形自由数
为什么我的代码变得 TLE ,即使我使用了最少数量的循环?请帮忙......
问题链接:
我的代码:
#include <stdio.h>
#include <math.h>
int main()
{
int t;
scanf("%d", &t);
while(t--)
{
long long int n,k;
scanf("%lld", &n);
int i,j,power,mx;
mx = 0;
for(i = 2; i < n; i++)
{
if(n % i == 0)
{
long long int m = n;
power = 0;
while(1)
{
int temp= m;
m = m/i;
if(m*i == temp)
{
power++;
}
else
{
break;
}
}
if(power >= mx)
{
mx = power;
}
}
}
if(mx == 0)
{
mx++;
}
printf("%d\n", mx);
}
return 0;
}
答案 0 :(得分:0)
您的代码中有3个级别的循环:
while(t--)
for(i = 2; i < n; i++)
while(1)
前两个循环导致重复n*t
次,并且根据问题描述,在最坏的情况下1E10
次。这将导致大多数在线评委的TLE。
解决方案:更改算法。