70分求调
查看原帖
70分求调
844496
J_Kobe楼主2024/10/24 12:56
#include <bits/stdc++.h>
#define int long long
using namespace std;

int n, k, ans, cnt;
unordered_map<int, bool> q;
void work()
{
	for (int i = 2; i * i * i <= n; i++)
	{
		int sum = i * i, m = 2;
		while (sum * i <= n)
		{
			sum *= i;
			m++;
			if (q[sum] || m < k)
			{
				continue;
			}
			if ((int)sqrtl(sum) * sqrtl(sum) == sum)
			{
				cnt++;
			}
			q[sum] = 1;
			ans++;
		}
	}
}

signed main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	cin >> n >> k;
	work();
	if (k == 1)
	{
		cout << n;
	}
	else if (k == 2)
	{
		cout << (int)sqrtl(n) + ans - cnt;
	}
	else
	{
		cout << ans + 1;
	}
	return 0;
}
2024/10/24 12:56
加载中...