社区讨论

70分求调

P9118[春季测试 2023] 幂次参与者 3已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@m2mu0xp2
此快照首次捕获于
2024/10/24 12:57
去年
此快照最后确认于
2025/11/04 16:21
4 个月前
查看原帖
CPP
#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;
}

回复

2 条回复,欢迎继续交流。

正在加载回复...