Форум: "Основная";
Текущий архив: 2002.02.07;
Скачать: [xml.tar.bz2];
ВнизЛюди помогите !! Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.005 c