Zdrojový kód na program prvočísel

Autor: Miroslav Židek | 3.11.2013 o 5:05 | (upravené 3.11.2013 o 5:58) Karma článku: 4,24 | Prečítané:  897x

Na rady viacerých ľudí som sa napokon rozhodol, že zverejním zdrojový kód programu na výpočet všetkých prvočísel. Jeho algoritmy sú spracované do štyroch základných podmienok, podľa ktorých je možné dôjsť k požadovaným výsledkom.

Mnou popisovanú metódu výpočtu hodnôt - podkladov pre výpočet prvočísiel som celú postupne popisoval po častiach na tomto blogu. Na celý postup jednotlivých krokov výpočtu prvočíslených hodnôt som prišiel pri mojom hľadaní súvislostí medzi prvočíslami a druhými mocninami - ich rozkladom. Tento spôsob hľadania všetkých prvočísel poznám už cca 25 rokov, ale až v tomto roku som sa rozhodol zverejniť ho.

Program sa od iných líši tým, že vďaka celkovému rozboru metódy a zápisu vypočítavaných hodnôt do tabuľky, dokážeme lepšie pochopiť súvislosti, akým spôsobom sa cez prvé hodnoty prvočísel vieme dostať k výsledkom prvočíselných hodnôt ďaľších.

Matematik Dan Zagier konštatoval, že prvočísla napriek svojej jednoduchej definícii vyrastajú medzi ostatnými číslami ako burina a nikto nedokáže predpovedať, kde vyrastie ďaľšie. Čo je však ešte úžasnejšie - prvočísla vykazujú zarážajúcu pravidelnosť a ich chovanie má svoje zákony. Prvočísla vraj tieto zákonitosti poslúchajú s takmer vojenskou presnosťou.

V slovách matematika Zagiera sa spájajú dve naoko rozporuplné vety, ktoré však vystihol podľa mnohých ľudí veľmi presvedčivo. Ma však iba polovičnú pravdu.

Ak si osvojíme postup výpočtu hodnôt - podkladov pre výpočet prvočísel a začneme vytvárať postupne podľa popisu potrebných krokov tabuľku hodnôt, zrazu sa pozastavíme nad tým, že vytvárame cez prvočísla na začiatku každého riadku predpoklady na to, aby sme pri dotváraní podmienok, kde bude stáť ďaľšie prvočíslo pochopili, že prvočísla nevyrastajú medzi ostatnými číslami ako burina, a vieme postupne povedať, kde vyrastie ďaľšie prvočíslo.

Tým, že chápeme postupnosť krokov výpočtu v tejto metóde, chápeme aj to, čo povedal spomínaný matematik, a to je to, že prvočísla vykazujú zarážajúcu pravidelnosť. My už dnes vieme, že majú svoje zákonitosti, pri ktorých dodržaní vznikajú.

Ak niečo pracuje podľa určitých krokov,je teda niečo aj na tom, že prvočísla pracujú s takmer vojenskou presnosťou.

 

Moja otázka znie :   "Podobnosť čisto náhodná ?"

 

 

Program s popisom : je rozdelený na dve časti  (  ////////  )

 

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
i,j,k,m,r:integer;
borovec:string;
l : array[1..20000] of Integer;
n : array[1..20000] of Integer;
Fout: TextFile;
begin
AssignFile(Fout, 'D:\Prvocisla\Mapa.txt');
Rewrite(Fout);

for i:=1 to 20000 do
begin
l[i]:=0;
n[i]:=0;
end;

m := 10000;
r:=1;
i := 1;
borovec := '';


while (r<m) do
begin

r := 6 * i - 1;                       // Výpočet možného modrého prvočísla.
if (l[i]=0) and (n[i]=0) then         // V stĺpci žiadna hodnota - prvočíslo dvojice.
borovec := borovec+IntToStr(R)+'  '; 
if (l[i]>0) and (n[i]=0) then         // V stĺpci je modrá - prvočíslo.
borovec := borovec+IntToStr(R)+'  ';

if (l[i]=n[i]) and (n[i]>0) then;     // Ak sa rovná modré červenému a sú kladné, nevypíše nič (zložené číslo)

j:=1;
k:=1;
while (J<m) do
begin
j := k * r - i;                       // Zapisovanie modrých hodnôt do tabuľky
l[j] := j;
j := k * r + i;                       // Zapisovanie červených hodnôt do tabuľky

n[j] := j;
k := k+1;
end;

//////////////////////////////////////////////////////////////////////////////////////////////////////
r := 6 * i + 1;                       // Výpočet možného červeného prvočísla.
if (l[i]=0) and (n[i]=0) then        // V stĺpci žiadna hodnota - prvočíslo dvojice.
borovec := borovec+IntToStr(R)+'  ';

if (l[i]=0) and (n[i]>0) then         // V stĺpci je červená - prvočíslo.
borovec := borovec+IntToStr(R)+'  ';
if (l[i]=n[i]) and (n[i]>0) then;     // Ak sa rovná modré červenému a sú kladné, nevypíše nič (zložené číslo)

j:=1;
k:=1;
while (J<m) do
begin
j := k * r - i;       // Zapisovanie modrých hodnôt do tabuľky
n[j] := j;

j := k * r + i;       // Zapisovanie červených hodnôt do tabuľky
l[j] := j;
k := k+1;
end;

i := i+1;             // Zvýšenie čísla riadku - nasledujúce prvočíslo


end;
ShowMessage(borovec);
Write(Fout,borovec);
CloseFile(Fout);

end;

 

Aj keď je program krátky a jednoduchý, vzťahuje sa naň autorské právo tak, ako aj na celú popísanú metódu získavania prvočísel z hodnôt - podkladov pre výpočet prvočísel a následným zápisom do tabuľky.

 

 

 

Páčil sa Vám tento článok? Pridajte si blogera medzi obľúbených a my Vám pošleme email keď napíše ďalší článok
Pridaj k obľúbeným

Hlavné správy

DOMOV

Smer chce byť politicky nekorektný aj robiť poriadky v osadách

Novými podpredsedami strany sa stali Juraj Blanár a Peter Žiga.

DOMOV

Fraška a boj s SNS či Kotlebom, analytici hodnotia snem Smeru

Snem veľa prekvapení podľa analytikov nepriniesol.

KULTÚRA

Milan Lasica: Už nemôžem umrieť predčasne

Keby som mohol, správal by som sa úplne inak, tvrdí.


Už ste čítali?