Top.Mail.Ru
Ответы

Задача "степень" C++

Помогите пожалуйста, 15 тестов код проходит, на 16 проваливается.
#include <iostream>
#include <vector>
#include <map>

using namespace std;

map<int, int> factorize(int a) {
map<int, int> factors;
if (a == 1) return factors;
for (int i = 2; i * i <= a; ++i) {
while (a % i == 0) {
factors[i]++;
a /= i;
}
}
if (a > 1) factors[a]++;
return factors;
}

long long compute_power(int p, int xp) {
long long result = 1;
for (int i = 0; i < xp; ++i) {
result *= p;
}
return result;
}

long long compute_N(const map<int, int>& x) {
long long N = 1;
for (const auto& [p, xp] : x) {
N *= compute_power(p, xp);
}
return N;
}

int main() {
int A;
cin >> A;

if (A == 1) {
cout << 1 << endl;
return 0;
}

map<int, int> factors = factorize(A);
map<int, int> x;
for (const auto& [p, k] : factors) {
x[p] = 1;
}

while (true) {
long long N = compute_N(x);
bool all_ok = true;
vector<int> to_increase;

for (const auto& [p, k] : factors) {
long long current = x[p] * N;
if (current < k) {
all_ok = false;
to_increase.push_back(p);
}
}

if (all_ok) {
cout << N << endl;
return 0;
} else {
for (int p : to_increase) {
x[p]++;
}
}
}

return 0;
}

По дате
По рейтингу
Аватар пользователя
Мыслитель
1мес

Дай свой тг я всё сделал

Аватар пользователя
Мудрец
1мес

Это где задача? Я придумал несколько решений, дай ссылку я порешаю

Аватар пользователя
Оракул
1мес

тут больше требуют математичеких знаний, чем знание языка. Нужно найти какую то закономерность и использовать ее для оптимизации кода.

Типа, вместо подсчета сумма первых n чисел, воспользоваться формулой арифметической прогрессии.