Top.Mail.Ru
Ответы

Задача на C++

Напишите код на C++, пожалуйста. Не надо писать, что уже решали. Те решения не работают.
Степень
Для того чтобы проверить, как её ученики умеют считать, Мария Ивановна каждый год задаёт им на дом одну и ту же задачу — для заданного натурального A найти минимальное натуральное N такое, что N в степени N (N, умноженное на себя N раз) делится на A. От года к году и от ученика к ученику меняется только число A. Вы решили помочь будущим поколениям. Для этого вам необходимо написать программу, решающую эту задачу.
Входные данные
Во входных данных содержится единственное число A
(1≤A≤109
— на всякий случай; вдруг Мария Ивановна задаст большое число, чтобы «завалить» кого-нибудь…).
Выходные данные
Выведите число N

По дате
По рейтингу
Аватар пользователя
Ученик
11мес
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
 ```cpp 
#include <iostream> 
#include <unordered_map> 
 
std::unordered_map<int, int> factorize(int a) { 
    std::unordered_map<int, int> factors; 
    int i = 2; 
    while (i * i <= a) { 
        while (a % i == 0) { 
            factors[i]++; 
            a /= i; 
        } 
        i++; 
    } 
    if (a > 1) { 
        factors[a] = 1; 
    } 
    return factors; 
} 
 
int legendre(int n, int p) { 
    int count = 0; 
    while (n) { 
        n /= p; 
        count += n; 
    } 
    return count; 
} 
 
int minimal_n(int a) { 
    if (a == 1) { 
        return 1; 
    } 
    std::unordered_map<int, int> factors = factorize(a); 
    int max_n = 1; 
    for (const auto& [p, k] : factors) { 
        int low = 1, high = k * p; 
        while (low < high) { 
            int mid = (low + high) / 2; 
            if (legendre(mid, p) >= k) { 
                high = mid; 
            } else { 
                low = mid + 1; 
            } 
        } 
        max_n = std::max(max_n, low); 
    } 
    return max_n; 
} 
 
int main() { 
    int a; 
    std::cin >> a; 
    std::cout << minimal_n(a) << std::endl; 
    return 0; 
} 
``` 
Аватар пользователя
Ученик
11мес

ну короче тебе надо найти такое n чтоб n в степени n делилось на а просто перебирай n от 1 и выше проверяй if pow(n,n) % a == 0 выводи n и всё дело сделано

Аватар пользователя
Мыслитель
11мес

Хорошо, что хоть кто-то банит подобные дебильные ответы.

Аватар пользователя
Ученик
11мес

чат гпт в помощь

Аватар пользователя
Ученик
11мес

Не решает

Аватар пользователя
Ученик
11мес

задай на зарубежных форумах(разумеется на англ) эти вопросы там намного больше шансов что ответят

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

Подключи библиотеки, открой функцию, напиши, что возвратить надо... И всё, тройка обеспечена.



Видео по теме