Информатика, вопрос задал arportnow , 7 лет назад

Срочно на с++, даю 100 баллов. Для того чтобы проверить, как её ученики умеют считать, Мария Ивановна каждый год задаёт им на дом одну и ту же задачу — для заданного натурального A найти минимальное натуральное N такое, что N в степени N (N, умноженное на себя N раз) делится на A. От года к году и от ученика к ученику меняется только число A.

Вы решили помочь будущим поколениям. Для этого вам необходимо написать программу, решающую эту задачу.

Входные данные

Во входных данных содержится единственное число A (1≤A≤109 — на всякий случай; вдруг Мария Ивановна задаст большое число, чтобы «завалить» кого-нибудь…).

Выходные данные

Выведите число N.

Примеры
Ввод
Вывод
1
1
8
4


kostyazhmur03: Почему это в задачи ошибки ?
kostyazhmur03: В решении *
kostyazhmur03: Не понимаю я
fkid2006: есть решение на с++?

Ответы на вопрос

Ответил mathkot
0

Ответ:

#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

Новые вопросы