请问这份代码哪里错了?求特殊样例
# 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;
}