Срочно на с++, даю 100 баллов. Для того чтобы проверить, как её ученики умеют считать, Мария Ивановна каждый год задаёт им на дом одну и ту же задачу — для заданного натурального A найти минимальное натуральное N такое, что N в степени N (N, умноженное на себя N раз) делится на A. От года к году и от ученика к ученику меняется только число A.
Вы решили помочь будущим поколениям. Для этого вам необходимо написать программу, решающую эту задачу.
Входные данные
Во входных данных содержится единственное число A (1≤A≤109 — на всякий случай; вдруг Мария Ивановна задаст большое число, чтобы «завалить» кого-нибудь…).
Выходные данные
Выведите число N.
Примеры
Ввод
Вывод
1
1
8
4
Ответы
Ответ:
#include <iostream>
#include<cmath>
using namespace std;
int main() {
int A;
int N = 1;
cin >> A;
for (N = 1; (int(pow(N, N))) < sqrt(A); N++) {
if(int(pow(N, N)) % A == 0){
break;
}
}
cout << N;
return 0;
}
Объяснение:
(в программе не реализуется проверка введенных данных)
(согласно условию предполагается, что такое число N существует)
- #include <iostream> - подключаем стандартную библиотеку для работы с консолью
- #include<cmath> - подключаем библиотек для работы с математическими функциями
Создаем переменную A в строчке - int A, аналогично создаем переменную N (int N = 1) и тут же присваиваем ей значение 1, так как по условию N - натуральное число.
Вводим данную переменную с консоли помощью строчки cin >> A;
Создаем цикл в котором будем искать переменную N. Рассмотрим детальнее начальные условия цикла:
- for (N = 1; (int(pow(N, N))) < sqrt(A); N++)
Так как переменная N уже создана, то начинаем цикл с N = 1.
Потом зададим в каком диапазоне изменяется N. Число N в степени N не может превышать числа A, а более точная математическая оценка говорит, что все числа начиная от √A не могут быть делителями числа A, поэтому:
- (int(pow(N, N))) < sqrt(A)
Операция pow(N, N) возводит число N в степень N и возвращает число типа double.
Так же при возведении в степень будет возвращено значение типа double, которое для корректной работы программы нужно преобразовать в int, поэтому используем приведение типа
int(pow(N, N)).
Счетчик цикла N увеличиваем (N++) пока не выйдем за пределы цикла.
Тело цикла:
- if(int(pow(N, N)) % A == 0){
break;
}
Если остаток от деления (%) числа pow(N, N) равен нулю, то это означает, что деление произошло нацело, тогда мы попадаем в тело условия и останавливаем цикл оператором break;
cout << N; - выводим число N
#SPJ3