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

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

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

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

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

textual
Листинг программы
function OnePrimary(D : Integer; var N : Integer) : Integer;
begin
  while N mod D = 0 do
    N := N div D;
  Result := 1;
end;
 
function PrimaryDiv(N : Integer) : Integer;
begin
  Result := 0;
  if not odd(N) then
    Result += OnePrimary(2, N);
  var D := 3;
  while N > 1 do
    begin
      if N mod D = 0 then
        Result += OnePrimary(D, N);
      D += 2;
    end;
end;
 
begin
  var N := ReadLnInteger('N = ');
  var maxN := 0; var maxD := 0;
  for var i := 1 to N do
    begin
      var PD := PrimaryDiv(i);
      if PD > maxD then
        begin
          maxN := i; maxD := PD;
        end;
    end;
  WriteLnFormat('Натуральное число {0} не большее {1} имеет наибольшее число простых делителей: {2}', maxN, N, maxD);
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
Похожие ответы