Предмет: Информатика, автор: mravgor70

На ввод подается одно число. Найдите сумму всех его простых делителей.
Входные данные
Одно целое положительное число, не превышающее 10 в степени 6 и большее, чем один.
Выходные данные
Выведите сумму простых делителей этого числа.
ПРИМЕРЫ
ВВОД
6
ВЫВОД
5

Ответы

Автор ответа: LikeSmileLJkee
2
Delphi / Pascal
function mySimpleDigit(a: integer):boolean;
var i: integer;
begin
for i:=sqrt(a) downto 1 do
if not (a mod i = 0) then mySimpleDigit:=false else mySimpleDigit:=true;
end;
var i,n,s: integer;
begin
write('Введите число: ');
readln(n);
if ((n>1) and (n<1000000)) then
begin
s:=0;
for i:=2 to n-1 do
if ((n mod i = 0) and (mySimpleDigit(i) = true)) then s:=s+i;
end;
writeln('Сумма всех простых делителей: ', s);
readln;
end.

C++
#include <cmath>
#include <iostream>
using namespace std;
bool mySimpleDigit(unsigned a) {
for (unsigned i =sqrt(a); i > 1; i--)
if (!(a % i)) return false;
return true;
}
int main() {
unsigned n,s;
cin >> n;
if ((n>1) && (n<1000000)) {
s=0;
for (unsigned i=2; i<=n; i++)
if ((n%i==0) && (mySimpleDigit(i)==true)) s+=i;
cout << "Summa vsex prostix deliteley: " << s;
} else cout << "Vvedite drugoe chislo";
return 0;
}

LikeSmileLJkee: for (unsigned i=2; i
mravgor70: Исправьте в коде
LikeSmileLJkee: В ответе исправил.
LikeSmileLJkee: При n=1 он также не посчитает, т.к. таких делителей не будет
LikeSmileLJkee: И если n=10^6, т.е. 1000000
mravgor70: Всее работает:) Спасибо огромное за помощь.
LikeSmileLJkee: Извините, что пришлось так повозиться. Спасибо Вам за терпение
mravgor70: Все хорошо
srzontmp: При вводе N = 69984, сумма простых делителей 136655,
хотя, для этого числа всего 2 простых делителя - 2 и 3 69984 = 2^5 * 3^9, все остальные делители - составные числа.
LikeSmileLJkee: Склоняйтесь к варианту в C++, Delphi/Pascal - нерабочий и удалить уже не могу, т.к. помечено как ответ
Похожие вопросы