Для каждого числа последовательности найти сумму его простых делителей - C (СИ)
Формулировка задачи:
Помогите пожалуйста.
Дана последовательность из целых чисел.
0 — конец последовательности.
Для каждого числа найти сумму его простых делителей.
Оформить функцией определение суммы простых делителей числа.
Думаю, мне нужна помощь только с функцией. Каркас думаю этот сгодиться
#include <cstdlib>
#include <iostream>
/*для положительных элементов последовательности*/
using namespace std;
int summaprostihdeliteley (int a)
{
int sum=0;
.............................
return sum;
}
int main(int argc, char *argv[])
{ int x;
int a[100];
int n=0;
int b;
cin >> b;
while (b!=0)
{ a[n]=b;
n++;
cin >> b;
}
for (int i=1;i<n;i++)
{
cout <<a[i]<<" ==>"<<summaprostihdeliteley(a[i])<<"\n";}
system("PAUSE");
return EXIT_SUCCESS;
}Решение задачи: «Для каждого числа последовательности найти сумму его простых делителей»
textual
Листинг программы
int summaprostihdeliteley(int a)
{ int i, s;
for(i=2, s=0; a > 1; i++) {
if (a%i==0) {
s += i;
while(a%i==0) a/= i; // Каждый делитель считается только 1 раз
}
}
return s;
}
Объяснение кода листинга программы
В данном коде функция summaprostihdeliteley(int a) принимает на вход целое число a и возвращает сумму его простых делителей. Происходит это следующим образом:
- Переменная i инициализируется значением 2, а переменная s — 0.
- Далее происходит цикл for, который выполняется до тех пор, пока a больше 1.
- Внутри цикла проверяется, делится ли a на i без остатка (если да, то это простой делитель).
- Если условие выполняется, то к переменной s прибавляется значение i, а переменная a делится на i (чтобы убрать этот делитель).
- После выполнения цикла, функция возвращает значение переменной s.