https://www.tekniikkatalous.fi/uutiset/ ... aca61a936c
Matemaatikot ovat havainneet alkuluvuista aiemmin tuntemattoman "epäsatunnaisen" ominaisuuden, jossa alkuluvut pyrkivät välttämään seuraajaksi samaa loppunumeroa kuin edeltäjänsä. Stanfordilaisen tutkijaryhmän mukaan tämä kuvio rikkoo aiemman oletuksen alkulukujen täysin satunnaisesta jakautumisesta, paljastaen uuden rakenteen lukuteorian peruskivien välillä.
Tärkeimmät havainnot:
Välttelyilmiö: Jos alkuluku päättyy tiettyyn numeroon (esim. 1, 3, 7 tai 9), seuraava alkuluku ei päätykään siihen yhtä todennäköisesti kuin muihin mahdollisiin numeroihin.
Rakenne satunnaisuudessa: Vaikka alkuluvut vaikuttavat satunnaisilta suurilla luvuilla, niillä on taipumus "hylkiä" edellistä loppunumeroa (esim. 3:a seuraa harvemmin 3, kuin 1, 7 tai 9).
Merkitys: Tämä löydös haastaa aiemmat matemaattiset oletukset ja tarjoaa uuden tavan ymmärtää alkulukujen jakautumista.
Tutkimus julkaistiin alun perin Wired-lehdessä ja se muuttaa käsitystä siitä, miten alkuluvut käyttäytyvät.
Tutkin ilmiötä Pascal ohjemalla:
Koodi: Valitse kaikki
Program Seuraava;
uses math,sysutils,DateUtils;
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;
siirtymamatriisi : ARRAY[1..4,1..4] OF qword;
rivisumma : ARRAY[1..4] OF qword;
edellinenindeksi, nykyinenindeksi : longint;
i,j : longint;
function viimeisennumeronindeksi(numero : longint) : longint;
begin
case numero of
1 : viimeisennumeronindeksi := 1;
3 : viimeisennumeronindeksi := 2;
7 : viimeisennumeronindeksi := 3;
9 : viimeisennumeronindeksi := 4;
else
viimeisennumeronindeksi := 0;
end;
end;
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);
{ Nollataan matriisi }
for i:=1 to 4 do
begin
rivisumma[i] := 0;
for j:=1 to 4 do
siirtymamatriisi[i,j] := 0;
end;
edellinenindeksi := 0;
{ Käydään alkuluvut läpi }
for ind:=7 to maxind do
begin
if taulukko[ind]=true then
begin
if (ind mod 10 in [1,3,7,9]) then
begin
nykyinenindeksi := viimeisennumeronindeksi(ind mod 10);
if edellinenindeksi <> 0 then
begin
inc(siirtymamatriisi[edellinenindeksi, nykyinenindeksi]);
inc(rivisumma[edellinenindeksi]);
end;
edellinenindeksi := nykyinenindeksi;
end;
end;
end;
writeln;
writeln('Siirtymämatriisi (%):');
writeln(' 1 3 7 9');
for i:=1 to 4 do
begin
case i of
1: write('Luvusta 1 ');
2: write('Luvusta 3 ');
3: write('Luvusta 7 ');
4: write('Luvusta 9 ');
end;
for j:=1 to 4 do
begin
if rivisumma[i] > 0 then
write(Format('%8.2f ', [100.0 * siirtymamatriisi[i,j] / rivisumma[i]]))
else
write(' 0.00 ');
end;
writeln;
end;
end.E:\Tiede\alkulukujenesiintyma>seuraava
2
3
5
7
11
13
17
19
23
29
31
37
41
43
47
53
59
61
67
71
73
79
83
89
97
Siirtymõmatriisi (%):
1 3 7 9
Luvusta 1 17,70 30,39 31,03 20,87
Luvusta 3 23,64 16,67 28,69 31,01
Luvusta 7 25,58 27,32 16,68 30,42
Luvusta 9 33,08 25,62 23,62 17,68
E:\Tiede\alkulukujenesiintyma>
Erityisesti rivi:Luvusta 9
Siinä sarake 1 on selvästi suurempi kuin sarake 9.