Задача: найти сумму простых делителей натурального числа.
Термины: Простое число - число, которое делится только на само себя и на единицу.
Напр: число 1 - простое, 2 - простое, 3 - простое, 4 - непростое (т.к. делится на 1,2 и 4), 11 - простое, 14 - непростое (т.к. делится на 1, 2, 7 и 14).
Натуральное число - целое число, которое больше или равно 1.
Напр: 1, 2, 3 ... и т.д.
Примечания: выход из программы осуществляется вводом отрицательного или равного нулю значения, т.е. не натурального значения.
Код программы:
#include<stdio.h>
#include<conio.h>
void main()
{
int simple(int); //прототип ф-ии simple
int n,d,s;
clrscr();
l1:s=1; //сразу записываем в сумму 1
printf("Zadayte natural'noe znachenie: ");
scanf("%d",&n); //вводим с клавы число и сохраняем его в n
if(n>0) //если число n натуральное
{
if(n%2==0) s+=2; //если n кратно 2, то увеличиваем сумму s на 2
if(n>2 && simple(n)) s+=n; //если n>2 и чило n простое, то увеличиваем сумму s на само число n
for(d=3;d<=n/2;d=d+2) //перебираем все d - нечетные потонцеальные делители числа n, которые меньше или равны половине n и больше или равны 3
if(n%d==0 && simple(d)) s+=d; // если d является делителем n и оно простое, то увеличиваем сумму s на d
printf("Otvet: summa prostih deliteley = %d\n\n",s); //печатаем ответ
goto l1; //переход к метке l1
}
}
int simple(int x) //далее тело ф-ии simple
{
int p=1,i=2;
while(p==1 && i<=x/2) //пока флаг p равен 1 и i (потенциальный делитель x) меньше или равен половине x
{
if(x%i==0) p=0; //если число не простое, то флагу p присваиваем 0
i++;
}
return p; //возвращаем в ф-ию main 0 (число x не простое) или 1 (число x простое)
}