关于ABC的D
查看原帖
关于ABC的D
531746
Composite_Function楼主2022/12/3 22:06

请问这份代码哪里错了?求特殊样例

# include <bits/stdc++.h>
using namespace std;
# define int long long
const int N = 1e8 + 10;
int n;
bitset<N> isprime;
vector<int> prime, fact, num;
void Init()
{
	for (int i = 2; i <= 1e7; ++i) isprime[i] = true;
	for (int i = 2; i <= 1e7; ++i) {
		if (!isprime[i]) continue;
		prime.push_back(i);
		for (int j = i * i; j <= 1e6 + 10; j += i)
			isprime[j] = false;
	}
}
bool check(int x)
{
	// cout << x << ":\n";
	for (int i = 0; i < fact.size(); ++i) {
		int cnt = 0, tx = x;
		while (tx > 0) tx /= fact[i], cnt += tx;
		// cout << fact[i] << "-" << cnt << " " << num[i] << endl;
		if (cnt < num[i]) return false;
	} 
	return true;
}
int binary_find(int l, int r)
{
	while (l <= r) {
		// cout << l << " " << r << endl;
		int mid = (l + r) / 2;
		if (check(mid)) r = mid - 1;
		else l = mid + 1;
	}
	return r + 1;
}
signed main()
{
	Init();
	cin >> n;
	for (auto i : prime) {
		int cnt = 0;
		while (n % i == 0) n /= i, ++cnt;
		if (cnt != 0) {
			fact.push_back(i);
			num.push_back(cnt);
		}
	}
	if (fact.size() == 0) cout << n << endl;
	else cout << binary_find(1, 3e18) << endl;
	return 0;
}
2022/12/3 22:06
加载中...