Alkulukujen esiintymistiheys...

Vastaa Viestiin
H
Harrastelija
Viestit: 25

Alkulukujen esiintymistiheys...

Viesti Kirjoittaja Harrastelija »

Lukua n pienempien alkulukujen määrän likiarvo on n/ln(n) - vaan kuinka tarkka arvo se on? :) Näyttää tarkkenevan, mitä suuremmaksi n kasvaa?

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.
Vastaa Viestiin