Определить натуральное число, не большее заданного n с наибольшим числом простых делителей - Free Pascal

Узнай цену своей работы

Формулировка задачи:

Определить натуральное число не большее заданного n с наибольшим числом простых делителей. Использовать функцию вычисления количества простых делителей числа.

Решение задачи: «Определить натуральное число, не большее заданного n с наибольшим числом простых делителей»

textual
Листинг программы
  1. function OnePrimary(D : Integer; var N : Integer) : Integer;
  2. begin
  3.   while N mod D = 0 do
  4.     N := N div D;
  5.   Result := 1;
  6. end;
  7.  
  8. function PrimaryDiv(N : Integer) : Integer;
  9. begin
  10.   Result := 0;
  11.   if not odd(N) then
  12.     Result += OnePrimary(2, N);
  13.   var D := 3;
  14.   while N > 1 do
  15.     begin
  16.       if N mod D = 0 then
  17.         Result += OnePrimary(D, N);
  18.       D += 2;
  19.     end;
  20. end;
  21.  
  22. begin
  23.   var N := ReadLnInteger('N = ');
  24.   var maxN := 0; var maxD := 0;
  25.   for var i := 1 to N do
  26.     begin
  27.       var PD := PrimaryDiv(i);
  28.       if PD > maxD then
  29.         begin
  30.           maxN := i; maxD := PD;
  31.         end;
  32.     end;
  33.   WriteLnFormat('Натуральное число {0} не большее {1} имеет наибольшее число простых делителей: {2}', maxN, N, maxD);
  34. end.

Объяснение кода листинга программы

  1. Первый шаг - это функция OnePrimary(D; N), которая принимает два аргумента: D (делитель) и N (число), и возвращает 1, если N делится на D без остатка, и ноль в противном случае. Эта функция используется в функции PrimaryDiv для определения простых делителей числа N.
  2. Функция PrimaryDiv(N) принимает одно число N и возвращает число, которое представляет собой сумму всех простых делителей числа N. Она начинается с проверки, является ли N четным числом. Если это так, то она вызывает функцию OnePrimary с делителем 2, чтобы учесть случаи, когда N является четным числом и имеет только один простой делитель.
  3. Затем она инициализирует переменную D равной 3 и входит в цикл, который продолжается до тех пор, пока N больше 1. В каждой итерации цикла она проверяет, делится ли N на D без остатка. Если это так, то она вызывает функцию OnePrimary с делителем D и добавляет результат к общей сумме простых делителей.
  4. После завершения цикла функция PrimaryDiv возвращает общую сумму простых делителей числа N.
  5. Основная программа начинается с чтения числа N от пользователя с помощью функции ReadLnInteger.
  6. Затем она инициализирует две переменные: maxN (максимальное число) и maxD (максимальное количество простых делителей), обе равные нулю.
  7. Она входит в цикл, который продолжается N раз. В каждой итерации цикла она вызывает функцию PrimaryDiv с текущим числом i и сохраняет результат в переменную PD.
  8. Затем она проверяет, больше ли PD, чем maxD. Если это так, то она обновляет maxN и maxD значениями PD и i соответственно.
  9. После завершения цикла программа выводит на экран строку формата, используя функцию WriteLnFormat, которая сообщает найденные значения maxN, N и maxD.
  10. Наконец, программа завершается.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы