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