我现在认为这道题不可做
查看原帖
我现在认为这道题不可做
30093
cosmicAC楼主2018/10/31 22:38

我的程序:

#include<bits/stdc++.h>
#define int64 long long
using namespace std;
int T,mu[70];
int main(){
	scanf("%d",&T);
	mu[1]=1;
	for(int i=2;i<=60;i++)
		for(int j=1;j<i;j++)if(i%j==0)mu[i]-=mu[j];
	while(T--){
		int64 x,ans=0;scanf("%lld",&x);
		for(int i=1;i<=60;i++)
			ans+=mu[i]*(int64)(__builtin_powl(x,1.l/i)+1e-16l);
		printf("%lld\n",ans+1);
	}
	return 0;
}

自我感觉良好,但是WA on test 6.

然后下载数据,发现是这个鬼东西: 576460752303423487

输出了中间结果,都挺对的。肯定是精度的问题。

于是我使用python对拍了一下。python输出了CF上的正确答案。但是中间结果是这样的:

>>> x=576460752303423487
>>> print int(pow(x,1.0))
576460752303423488

所以我现在大胆猜想数据是错的

2018/10/31 22:38
加载中...