Задача:
Дана последовательность из целых чисел. 0 — конец последовательности. Для каждого числа найти сумму его простых делителей. Оформить функцией определение суммы простых делителей числа.
Итак. Последовательность — массив. Заполняем его с клавиатуры и выводим как есть. Далее сами вычисления. Нужно найти простые числа до числа, для этого я буду использовать функцию isPrime (она на шарпе, но да я одну строчку изменил и работает на си), а нам еще нужно и делители. Значит остаток от деления числа должен быть равен нулю.
Пишем код:
#include <iostream>
#include <locale>
using namespace std;
bool isPrime(int number)
{
if (number < 2) return false;
for (int i = 2; i <= sqrt(number); i++)
{
if (number % i == 0) return false;
}
return true;
}
int getSum(int number)
{
int sum=0;
for (int i = 2; i < number; i++)
{
if (isPrime(i) && number % i == 0)
{
sum +=i;
}
}
return sum;
}
int _tmain(int argc, _TCHAR* argv[])
{
const int SIZE = 100;
int arr [SIZE], n;
setlocale(LC_ALL, "Russian");
cout << "Введите n ";
cin >> n;
if (n > SIZE)
{
cout << "Ошибка! n больше максимального значения! Введите меньшее число n";
system("pause");
return -1;
}
// Ввод данных с клавиатуры. Заполнение массива.
for (int i = 0; i < n; i++)
{
cout << "Введите " << i << " элемент последовательности:";
cin >> arr[i];
}
// Вывод исходного массива на экран
for (int i = 0; i < n; i++)
{
cout << arr[i] << " ";
}
cout << endl;
// Вывод измененного массива
for (int i = 0; i < n; i++)
{
cout << getSum(arr[i]) << " ";
}
system("Pause");
return 0;
}
Пример запуска программы:
Скачать решение в Visual Studio (исходник)