95分,用了sqrtl也没用,求大佬帮忙找一下问题
查看原帖
95分,用了sqrtl也没用,求大佬帮忙找一下问题
393699
HXR123楼主2023/9/21 20:24
#include<bits/stdc++.h>
using namespace std;
//long long a[1000001][50];
long long b[10000001];
int main()
{
	long long n,k;
	long long ans=1;
	cin>>n>>k;
	if(k==1)
	{
		cout<<n;
		return 0;
	}
	int k1=k;
	if(k==2)
	{
		ans=pow(n,1.0/2);
		k++;
	}
	int h=0;
	for(long long i=2;powl(i,k)<=n;i++)
	{
		if(powl(i,k)<0)break;
		for(long long j=k;powl(i,j)<=n;j++)
		{
			long long w=powl(i,j);
			if(w<0)break;
			if(k1==2&&sqrtl(w)==(int)sqrtl(w))continue;
			b[++h]=w;
		}
	}
	sort(b+1,b+1+h);
	for(int i=1;i<=h;i++)
	{
//		cout<<b[i]<<" ";
		if(b[i]!=b[i-1])ans++;
	}
//	for(int i=1;i<=)
//	if(k==2&&n>=1e18)ans--;
	cout<<ans;
	return 0;
}
2023/9/21 20:24
加载中...