#include<stdio.h>
#include<math.h>
int main(void)
{
int T, N, i, sum;
scanf("%d", &T);
while (T-- > 0)
{
scanf("%d", &N);
sum = 0;
for (i = 1; i <= sqrt(N); i++)
{
if (N%i == 0)
{
sum += i;
if (i != 1 && i != N / i)
sum += N / i;
}
}
printf("%d\n", sum);
}
}
这都TLE了,不应该啊,难道是sqrt()的time complex的问题? 然后找了找sqrt()的源码,最后在stackoverflow上知道自己错在哪里了。。。。
#include<stdio.h>
#include<math.h>
int main(void)
{
int T, N, i, sum;
scanf("%d", &T);
while (T-- > 0)
{
scanf("%d", &N);
sum = 0;
int length = sqrt(N);
for (i = 1; i <= length; i++)
{
if (N%i == 0)
{
sum += i;
if (i != 1 && i != N / i)
sum += N / i;
}
}
printf("%d\n", sum);
}
}