Для каждого числа последовательности найти сумму его простых делителей - Turbo Pascal
Формулировка задачи:
Вводится последовательность целых чисел, 0 - конец последовательности. Для каждого числа последовательности найти сумму его простых делителей (функцию оформить определения суммы простых делителей числа)
Объясните пожалуйста код программы.
Пожалуйста помогите, мне очень нужно сейчас.
Типо так но
Это я нашёл количество его делителей, а мне надо сумму его простых делителей.
Решение задачи: «Для каждого числа последовательности найти сумму его простых делителей»
textual
Листинг программы
uses crt;
function summa(n:integer):integer;
function prost(x:integer):boolean;
var y:integer;
f:boolean;
begin
if x<2 then f:=false{0,1 не простое}
else if x=2 then f:=true{2 простое}
else if x mod 2=0 then f:=false{четные больше 2 не простые}
else
begin
f:=true;
y:=3;
while(y*y<=x)and f do
if x mod y=0 then f:=false
else inc(y,2);
end;
prost:=f
end;
var i,s:integer;
begin
if prost(n) then s:=n else s:=0;
for i:=2 to n div 2 do
if(n mod i=0)and prost(i) then s:=s+i;
summa:=s;
end;
var a:integer;
begin
clrscr;
writeln('Вводите целые положительные числа, окончание ввода 0');
repeat
readln(a);
if a<>0 then writeln('Сумма простых делителей=',summa(a));
until a=0;
readln;
end.
Объяснение кода листинга программы
Этот код написан на Turbo Pascal и выполняет следующие действия:
- Создает две функции:
summaиprost.summaпринимает целое числоnи возвращает сумму его простых делителей, аprostпроверяет, является ли число простым. - Объявляет переменные
y,fиs.yиспользуется для поиска простых чисел,fиспользуется для отслеживания того, является ли число простым, аsиспользуется для хранения суммы простых делителей. - В цикле
whileищет простые числа от 3 до квадратного корня изx. Если числоyумножается на само себя и остаток от деленияxнаyравен 0, тоfустанавливается вfalse, что означает, что числоyне является простым. Если это не происходит, тоfустанавливается вtrue, иyувеличивается на 2. - После завершения цикла
while,fбудет равноtrue, еслиxимеет хотя бы одно простое делитель, иsбудет равно сумме этих делителей. - Функция
summaвызывается для получения суммы простых делителей числаa. - Программа завершается после ввода последнего числа, и выводится сообщение с результатом.