Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Простая задача

Автор: -Александр- 29.09.2007 0:12

хотел написать программу для подсчета совершенных чисел от 1 до 10 000

вот ее код, но что-то там не работает

program Project1;
{$APPTYPE CONSOLE}
uses SysUtils;
var mersen:real;
var p:integer;
var sover:real;
var sum_sover:real;

var n:real;
begin
sum_sover:=0;

sover:=0;
for p:=1 to 10000 do
begin
n:=p;
mersen:=(exp(n)*ln(2.0))-1.0;

//-1;
//делаем проверку на простоту числа мерсена
if ((mersen/2)*2<>mersen)then

if ((mersen/5)*5<>mersen)then
if ((mersen/7)*7<>mersen)then

if ((mersen/9)*9<>mersen)then


if ((mersen/23)*23<>mersen)then

if ((mersen/341)*341<>mersen)then

sover:=(exp(p-1)*ln(2.0))*mersen;


if sover>10000 then
begin
sum_sover:=sum_sover+sover;
end
else
sum_sover:=sum_sover-1;

end;
// writeln('Symma chicel ravna', sum_sover);

readln;


end.

на паскале не прогал давно ....хотелось бы получить помощь

Автор: volvo 29.09.2007 0:46

blink.gif Это ты число Мерсена так находишь:

Цитата
mersen:=(exp(n)*ln(2.0))-1.0;
? Все проще гораздо:

var
mersen: longint;
...
mersen := pred(1 shl n);



(да и вообще, зачем проверять то, что задано по определению? Числа Мерсена - это как раз простые числа)

А программа по поиску совершенных чисел лежит в FAQ-е...

Автор: -Александр- 29.09.2007 1:46

а ссылочку не дашь

Автор: volvo 29.09.2007 1:50

FAQ: http://forum.pascal.net.ru/index.php?s=&showtopic=3916&view=findpost&p=32236