
Koodi: Valitse kaikki
n n/ln(n) tarkka virhe%
2 1.4E+0002 5.0E+0001 -1.9E+0002
4 7.2E+0001 5.0E+0001 -4.4E+0001
8 4.8E+0001 5.0E+0001 3.8E+0000
16 3.6E+0001 3.8E+0001 3.8E+0000
32 2.9E+0001 3.4E+0001 1.6E+0001
64 2.4E+0001 2.8E+0001 1.5E+0001
128 2.1E+0001 2.4E+0001 1.5E+0001
256 1.8E+0001 2.1E+0001 1.5E+0001
512 1.6E+0001 1.9E+0001 1.5E+0001
1024 1.4E+0001 1.7E+0001 1.4E+0001
2048 1.3E+0001 1.5E+0001 1.3E+0001
4096 1.2E+0001 1.4E+0001 1.3E+0001
8192 1.1E+0001 1.3E+0001 1.2E+0001
16384 1.0E+0001 1.2E+0001 1.1E+0001
32768 9.6E+0000 1.1E+0001 1.0E+0001
65536 9.0E+0000 1.0E+0001 9.7E+0000
131072 8.5E+0000 9.3E+0000 9.2E+0000
262144 8.0E+0000 8.8E+0000 8.6E+0000
524288 7.6E+0000 8.3E+0000 8.3E+0000
1048576 7.2E+0000 7.8E+0000 7.8E+0000
2097152 6.9E+0000 7.4E+0000 7.4E+0000
4194304 6.6E+0000 7.1E+0000 7.1E+0000
8388608 6.3E+0000 6.7E+0000 6.7E+0000
16777216 6.0E+0000 6.4E+0000 6.4E+0000
33554432 5.8E+0000 6.2E+0000 6.2E+0000
67108864 5.5E+0000 5.9E+0000 5.9E+0000
Koodi: Valitse kaikki
Program Alkuluku;
uses math,sysutils,DateUtils,bigdecimalmath,graph;
CONST maxind = 100000000; {lasketaan miljardia pienemmät alkuluvut}
VAR taulukko : ARRAY[1..maxind] OF BOOLEAN;
lkm, luku: qword;
ind: longint;
neliojuuri,laskellaninenesiintymistiheys,tarkka: Float;
tutkimus: qword;
virhe: float;
begin
lkm:=maxind;
neliojuuri:= Sqrt(lkm);
for ind:=2 to maxind do taulukko[ind]:=true; {oletetaan kaikki alkuluvuiksi}
taulukko[1]:= false;
luku:=2;
ind:=luku;
while ind<=lkm do {poistetaan 2:n monikerrat}
begin
taulukko[ind]:= false;
ind:=ind+2;
end;
while (luku < neliojuuri) do
begin
while (taulukko[luku] = false) and (luku < neliojuuri) do
{etsitään seuraava alkuluku}
luku:=luku + 1;
ind:=luku + luku;
while ind < lkm do {poistetaan sen monikerrat}
begin
taulukko[ind]:= false;
ind:=ind+luku;
end;
luku:= luku + 1;
end;
taulukko[2]:= true;
{Nyt on taulukoitu miljardia pienemmät alkuluvut.
Tulostetaan sataa pienemmät kokeeksi.}
for ind:=1 to 100 do
if taulukko[ind]=true then writeln (ind);
lkm:=0;
tutkimus:=2;
for ind:=2 to maxind do
begin
if taulukko[ind] then lkm:=lkm+1;
laskellaninenesiintymistiheys:=100*(ind/Ln(ind)/ind);
tarkka:=100*lkm/ind;
if (ind>=tutkimus) then
begin
virhe:=100*(lkm-(ind/Ln(ind)))/lkm;
writeln(ind:10, ' ', laskellaninenesiintymistiheys:10,' ',tarkka:10, ' ', virhe:10);
tutkimus:=tutkimus*2;
end;
end;
end.