70分求调
查看原帖
70分求调
1391117
PatrickWu楼主2024/11/22 16:34
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll n,k;
map<ll,bool>mp;
int main(){
	ios::sync_with_stdio(false);
	cin>>n>>k;
	ll tot=0,rep=0;
	for(ll i=2;i*i*i<=n;i++){
		int r=3;
		ll num=i*i*i;
		if(r>=k&&mp[num]==0){
			mp[num]=1;tot++;
			if((ll)sqrt(num)*(ll)sqrt(num)==num)rep++;
		}
		while(num*i<=n){
			num*=i;r++;
			if(r<k)continue;
			if(mp[num]==0){
				mp[num]=1;tot++;
				if((ll)sqrt(num)*(ll)sqrt(num)==num)rep++;
			}
		}
	}
	ll ans=tot+1;
	if(k==2)ans+=(ll)sqrt(n)-rep-1;
	if(k==1)ans=n;
	cout<<ans;
	return 0;
}
2024/11/22 16:34
加载中...