包对的
2025-04-08 18:52:00
发布于:北京
#include <iostream>
#include <vector>
#include <climits>
#include <cmath>
using namespace std;
void factorize(int m, vector<pair<int, int>>& factors) {
for (int i = 2; i * i <= m; i) {
if (m % i == 0) {
int cnt = 0;
while (m % i == 0) {
m /= i;
cnt;
}
factors.emplace_back(i, cnt);
}
}
if (m > 1) {
factors.emplace_back(m, 1);
}
}
int computeTime(int s, const vector<pair<int, int>>& m_factors, int m2) {
int max_time = 0;
for (const auto& factor : m_factors) {
int p = factor.first;
int cnt_m = factor.second * m2;
int cnt_s = 0;
while (s % p == 0) {
s /= p;
cnt_s++;
}
if (cnt_s == 0) {
return -1;
}
int time = (cnt_m + cnt_s - 1) / cnt_s;
if (time > max_time) {
max_time = time;
}
}
return max_time;
}
int main() {
int N;
cin >> N;
int m1, m2;
cin >> m1 >> m2;
vector<pair<int, int>> m_factors;
factorize(m1, m_factors);
int min_time = INT_MAX;
for (int i = 0; i < N; ++i) {
int s;
cin >> s;
int time = computeTime(s, m_factors, m2);
if (time != -1 && time < min_time) {
min_time = time;
}
}
if (min_time == INT_MAX) {
cout << -1 << endl;
} else {
cout << min_time << endl;
}
return 0;
}
这里空空如也
有帮助,赞一个