85pts求调
查看原帖
85pts求调
713562
hahaxiang楼主2023/3/8 12:25
#include<bits/stdc++.h>
#define int unsigned long long
using namespace std;
int number[100000];
int len;
int n;
int ans;
int k;
int quickpower(int a,int b)
{
	int s=1,base=a;
	while(b!=0)
	{
		int last=s;
		if(b&1)
		s*=base;
		if(s<last)
		return LLONG_MAX;
		b>>=1;
		base*=base;
	}
	return s;
}
signed main()
{
	cin>>n>>k;
	if(k==1)
	{
		cout<<n;
		return 0;
	}
	for(int i=2;i<=sqrt(1e9);i++)
	{
		int c=i*i;
		while(c<=1e9)
		{
			number[++len]=c;
			c*=i;
		} 
	}
	sort(number+1,number+1+len);
	len=unique(number+1,number+1+len)-number-1;
	ans+=1;
	for(int i=k;i<=64;i++)
	{
		if(quickpower(2,i)>n)
		{
			break;
		}
		int l=2,r=1e9;
 		while(l<r)
		{
			int mid=(r+l)/2+1;
			if(quickpower(mid,i)<=n)
			{
				l=mid;
			}
			else
			{
				r=mid-1;
			}
		}
		int w=quickpower(l,i);
		int c=l;
		l=0,r=len;
		while(l<r)
		{
			int mid=(r+l)/2+1;
			if(quickpower(number[mid],i)<=w)
			{
				l=mid;
			}
			else
			{
				r=mid-1;
			}
		}
		ans+=c-1-l;
	}
	cout<<ans;
	return 0;
}

wa 最后三个点(应该是n=1e18的)

2023/3/8 12:25
加载中...