Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.02.07;
Скачать: CL | DM;

Вниз

Люди помогите !!   Найти похожие ветки 

 
Masa   (2002-01-22 12:06) [0]

Нужно найти простые числа их множества.
Пытаюсь найти вот таким способом. Не выходит.
Что здесь не так, помогите !!

Read(N);
MN := [2..N];
PR := [];

FOR k:=2 to N do
if K in MN Then
begin
PR := PR+[K];
for M:=1 TO N DIV K do
MN := MN -[k*n];
end;


 
MBo   (2002-01-22 12:51) [1]

исправь
MN := MN -[k*M];


 
Masa   (2002-01-22 13:04) [2]

>MBo
Так не выводит вообще ничего.


 
MBo   (2002-01-22 13:10) [3]

procedure TForm1.Button1Click(Sender: TObject);
var n,k,m:integer;
mn,pr:set of byte;
begin
N:=20;
MN := [2..N];
PR := [];

FOR k:=2 to N do
if K in MN Then
begin
PR := PR+[K];
for M:=1 TO N DIV K do
MN := MN -[k*m];
end;
for m:=2 to n do
if m in pr then memo1.lines.add(inttostr(m));
end;


 
Digitman   (2002-01-22 13:11) [4]

ф-ция возвращает ссылку на область памяти, содерж. массив простых чисел, упорядоченный по возрастанию

если параметр IsRange = True, то ф-ция возвращает все простые числа в диапазоне (1..значение_параметра_Count) и параметр Count возвратит общее число простых чисел в результирующем массиве, принадлежащих заданному диапазону (макс.значение Count = 536870910)

если параметр IsRange = False, ф-ция возвращает первые Count-простых чисел, начиная с 1 (макс.значение Count = 536870910)

результат ф-ции = nil, если - ошибка (резуль.массив не сформирован). Если <> nil, то после использования его необходимо освободить



type

TLongWordArray = array[0..$1FFFFFFE] of LongWord;
PLongWordArray = ^TLongWordArray;

TByteBoolArray = array[0..$1FFFFFFE] of ByteBool;
PByteBoolArray = ^TByteBoolArray;

implementation

function Sieving(var Count: LongWord; IsRange: Boolean): PLongWordArray;
var
i,j,k,n: LongWord;
Sieve: PByteBoolArray;
SieveLimit: LongWord;
RangeFactor: Double;
begin
if Count < 1 then
Result:= nil
else begin
if not IsRange then begin
SieveLimit:= Round(Count * RangeFactor);
GetMem(Sieve, SieveLimit);
try
GetMem(Result, Count * SizeOf(LongWord));
try
FillChar(Sieve^, SieveLimit, True);
j:= 0;
for i:= 0 to Pred(Count) do begin
while not Sieve[j] do Inc(j);
k:= j;
Inc(j);
n:= j;
Result[i]:= n;
if n > 1 then while SieveLimit - k > n do begin
Inc(k, n);
Sieve[k]:= False;
end;
end;
except
FreeMem(Result);
raise;
end;
finally
FreeMem(Sieve);
end;
end else begin
if Count = 1 then
SieveLimit:= Count
else
//


 
Digitman   (2002-01-22 13:14) [5]

P.S.
Галиматья в комментарии в коде так выглядит в оригинале :
//ф-ция распределения простых чисел близка к Y(X) = X / Ln(X)



Страницы: 1 вся ветка

Текущий архив: 2002.02.07;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.014 c
14-18970
Nikolay
2001-12-13 15:58
2002.02.07
Взятка!


7-18999
Alexx
2001-10-31 08:40
2002.02.07
Работа с сетевой картой


3-18731
der
2002-01-10 09:42
2002.02.07
Периодически возникает ошибка. Insufficient memory for this operation.


1-18915
Evgeny
2002-01-23 08:31
2002.02.07
ComboBox


1-18902
cyborg
2002-01-21 21:19
2002.02.07
Как вывести текст в TImage чтобы фон у него был прозрачный?