Определить, больше ли сумма сумм простых множителей элементов, идущих после последнего отрицательного элемента, заданного числа - C (СИ)
Формулировка задачи:
Решение задачи: «Определить, больше ли сумма сумм простых множителей элементов, идущих после последнего отрицательного элемента, заданного числа»
#include <stdio.h>
#include <conio.h>
#define M 10
int sum_factor(int x) /* здесь находится сумма простых множителей */
{
int cnt, s = 0, i = 2;
while(i < x / 2)
{
for(cnt = 0; (x > 1) && (x % i == 0); x /= i)
cnt += 1;
if(cnt) s += i;
i += (i == 2 ? 1 : 2);
}
if(x > 1) s += x;
return s;
}
int main() {
int L = 20, s = 0, i;
int a[M] = {1, 21, 35, 42, 15, 46, -72, 178, 29, 10};
for(i = 0; a[i] > 0; i++);
for(i = i + 1; i < M; i++)
s += sum_factor(a[i]);
printf("Сумма сумм простых множителей (%d) %s меньше L = %d\n",
s, (s < L ? "" : "не"), L);
return 0;
}
Объяснение кода листинга программы
В этом коде определен набор чисел в массиве a, и первое положительное число в этом массиве используется как пороговое значение для определения последнего отрицательного числа.
Затем, используя функцию sum_factor, которая принимает число и возвращает сумму его простых множителей, в цикле суммируются простые множители всех чисел в массиве a после последнего отрицательного числа.
Функция sum_factor использует цикл while для перебора всех чисел от 2 до x/2, а затем использует вложенный цикл for для проверки, делится ли x на текущее число без остатка. Если делится, то переменная cnt увеличивается на 1, и если x больше 1, то к s добавляется текущее число.
В основной функции, после определения последнего отрицательного числа в массиве a, в цикле суммируются простые множители всех чисел в массиве a после последнего отрицательного числа.
Затем выводится сообщение, говорящее, является ли сумма сумм простых множителей меньше или больше L.