我正試圖解決關於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