C/C++

Напишите программу на языке паскаль

Напишите программу на языке Паскаль, которая вычисляет характер числа. Число вводится с клавиатуры. (Характером натурального числа называют сумму всех его делителей, не равных единице и самому числу).
Простым перебором от 2 до N/2 можно...
 program Character;
var
n, c, d: longint;
begin
write('Введите число: ');
readln(n);
c := 0;
for d := 2 to n div 2 do
if n mod d = 0 then c := c + d;
writeln('Характер: ', c)
end.
Примеры:
 Введите число: 1236
Характер: 1675

Введите число: 1024
Характер: 1022

Введите число: 289
Характер: 17

Введите число: 197
Характер: 0

Введите число: 1073741824
Характер: 1073741822
(последнее - 2³° - считается заметно долго, так что если вам такого порядка числа нужны, то алгоритм потребуется посложнее)
Денис Юрьевич
Денис Юрьевич
87 571
Лучший ответ
 var n: longint;

function calc(n: longint): longint;
var i, sum: longint;
begin
i := 2;
while sqr(i) < n do begin
if n mod i = 0 then inc(sum, i + n div i);
inc(i)
end;
if sqr(i) = n then inc(sum, i);
calc := sum
end;

begin
read(n);
write(calc(n))
end.
Делить до n / 2 - это обогревать вселенную бессмысленными вычислениями. Для нахождения всех делителей достаточно делить до √n. И на onlinegdb.com число 1073741824 обрабатывается 0.1 сек, т.к. для получения ответа требуется всего 32766 итераций цикла.
Bekzodbek (((()))))) А разве sum не надо вначале в 1 установить?
Андрей Прокудин Хорошо. Тогда поставим тип в int64 и скормим ей 1152921504606846976 = 2⁶⁰
Как то так... попробуй
**************************
Var n, i, sum: integer; //Описание переменных
Begin //Начло программы
writeln ('Введите число'); //Диалог с пользователем
readln(n); //Считывание числа

writeln('Делители числа:'); //Диалог с пользователем
for i := 2 to n div 2 do //Цикл For от до половины n
if (n mod i) = 0 then begin //Если число делится на i, то выводим
write(i,' ');
end; //Конец условного оператора if
End. //Конец программы
Elshen Isazade
Elshen Isazade
96 433
Андрей Прокудин Только там надо вывести сумму делителей, а не сами делители.
прикольный вопрос в ветке про С
тебе оно действительно надо? или прикалываешься?
или идиот?
А.
Андрей .
75 320