我正试图解决关于spoj的INTEGER1问题。我的方法非常简单。它首先计算从2到63的所有幂的x(x^i = n)。然后删除所有重复,然后最终累加幂。但它正在给我错误的答案。 我已经在Ideone和我的机器上尝试了很多用例,但它给了我正确的结果。为什么spoj为这个“Integer功能”的解决方案提供了错误的答案?
#include<stdio.h>
#include<math.h>
int main()
{
unsigned long long int a,b,result;
unsigned long long int power[65],temp;
int i,j;
while(1)
{
scanf("%lld",&a);
scanf("%lld",&b);
if(a==0)
break;
result=0;
power[0]=0;
power[1]=b-a+1;
a--;
for(i=2;i<64;i++)
{
power[i]=floor(pow((long double)b,(long double)1/i));
while(pow((power[i]-1),(long double)i)>=b)
{
power[i]--;
}
while(pow((power[i]+1),(long double)i)<=b)
{
power[i]++;
}
temp=floor(pow((long double)a,(long double)1/i));
while(pow((temp-1),(long double)i)>=a)
{
temp--;
}
while(pow((temp+1),(long double)i)<=a)
{
temp++;
}
power[i]-=temp;
}
for(i=63;i>=1;i--)
{
for(j=i*2;j<64;j=j+i)
{
power[i]-=power[j];
}
}
for(i=1;i<64;i++)
{
result+=i*power[i];
}
printf("%lld\n",result);
}
return 0;
}
请帮我一把。
你读过关于挑战的任何意见?请同时阅读[每位计算机科学家应了解的浮点算术知识](http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html) – Deduplicator
@Deduplicator我读过但我认为我可以使用它来计算根目录。但非常感谢您提供了这个有用的链接。这是否意味着我必须自己计算第n个根?如果可以,请给我也链接? – Naman
http://en.wikipedia.org/wiki/Nth_root_algorithm – deviantfan