„Eratoszthenész szitája” változatai közötti eltérés

[ellenőrzött változat][nem ellenőrzött változat]
Tartalom törölve Tartalom hozzáadva
Visszavontam az utolsó 2 változtatást (46.40.26.177), visszaállítva Atobot szerkesztésére: marha érdekes, de nem jó
Csaboka (vitalap | szerkesztései)
Javítások a példakódokban (stílus javítása, tömb túlindexelés megszüntetése a C++ és Pascal példákban)
93. sor:
#include <iostream>
#include <fstream>
#include <string>
 
using namespace std;
int main()
{
ofstream fout;
string nev;
cout << "Nev: "; cin >> nev; //fájlnév bekérése
fout.open(nev.c_str()); //fájl létrehozása
const int M=50; //Meddig vizsgáljuk a számokat
fout <<"A(z) " << M << "-nel nem nagyobb primszamok:\n"; //A fájl bevezető szövege
bool tomb [M+1]; //logikai tömböt hozunk létre
tomb[0]=tomb[1]=false; // a 0-át és az 1-et alapból hamisnak vesszük, hiszen nem prímek.
for (int i=2;i<=M;++i) tomb[i]=true; //2-től indítjuk a for-t, alapból mindent igazra állítunk.
int j=2; //indexet ezzel figyelem
while (j<=M) {
for(int i=j*j; i<=M; i+=j) tomb [i] = false;// a többszörösök logikai értékét hamisra állítom
while(tomb[++j]==false);} // ha a következő érték hamis, akkor továbbugrik a következőre
for(int i=0;i<=M;++i)
if(tomb[i]) //megnézzük hogy igaz-e
fout<<i<<" "; // kiírja a fájlba a számokat, szóközzel elválasztva
 
const int M = 50; //Meddig vizsgáljuk a számokat
fout << "A(z) " << M << "-nel nem nagyobb primszamok:\n"; //A fájl bevezető szövege
bool tomb [M + 1]; //logikai tömböt hozunk létre
tomb[0] = tomb[1] = false; // a 0-át és az 1-et alapból hamisnak vesszük, hiszen nem prímek.
for (int i = 2; i <= M; ++i) tomb[i] = true; //2-től indítjuk a for-t, alapból mindent igazra állítunk.
for (int i = 2; i*i <= M; i++) {
if (tomb[i]) {
// prímet találtunk, a többszöröseit kiszitáljuk
for (int j = i*i; j <= M; j += i) tomb[i] = false;
}
}
 
for (int i = 0; i <= M; ++i) {
if if(tomb[i]) { //megnézzük hogy igaz-e
fout fout<< i << " "; // kiírja a fájlba a számokat, szóközzel elválasztva
}
}
</source>
 
122 ⟶ 126 sor:
<source lang="pascal">
 
const n: = 2000000; //{az n lehet bármilyen érték ami belefér longint-ba}
var n,i,j,p:longint;
a:array[1..2000000n] of boolean; //{logikai tömböt hozunk létre}
fout:text; //{kimeneti fájl}
Begin
assign(fout,'Név'); rewrite(fout);
a[1]:=false; //{az a[1] 0-thamisat vesz fel mivel az 1 nem prímszám}
n:=2000000; //az n lehet bármilyen érték ami belefér longint-ba
for i:=2 to n do {feltöltjük a tömböt igaz értékekkel}
a[1]:=false; //az a[1] 0-t vesz fel mivel az 1 nem prímszám
for i:=2 to n do a[i]:=true; //feltöltjük a tömbök 1-esekkel
p:=2;
while p*p <= n do begin
if j:=a[p*p;] then begin
{prímet találtunk, a többszöröseit kiszitáljuk}
while (j<= n) do begin
j:=p*p;
a[j]:=false; //a többszörösöket hamissá váltjuk
while j <= n do j:=j+p;begin
enda[j]:=false;
lst[j] := 0j+p;
repeat p:=p+1 until a[p]=true; //ha a következő érték hamis, akkor továbbugrik
end;
end;
end;
for i:=1 to n do if a[i]=true then write(fout,i,' '); //{kiíratjuk azokat az elemeket amelyek igazak maradtak, vagyis prímszámok}
if a[i] then
write(fout,i,' ');
close(fout);
End.
151 ⟶ 160 sor:
# -*- coding: utf-8 -*-
 
from math import sqrt
lst = [1]*1000 # létrehozunk egy listát, ebben a példában (1000) elemmel
 
for i in range(2,1000): # A lista bejárása a 2 indexértéktől kezdve
n = 1000
for j in range(i*2, 1000, i): # a listának azon elemeihez, melyek indexe az i-nek többszörösei, nullás (false) értéket rendelünk
lst = [1True]*1000n # létrehozunk egy listát, ebben a példában (1000) elemmel
lst[j] = 0
for i in range(2,1000int(sqrt(n))): # KiíratjukA azoknaklista azbejárása elemekneka az2 indexét,indexértéktől melyekkezdve értékea 1korlát maradtgyökéig
for j in range(i*2i, 1000n, i): # a listának azon elemeihez, melyek indexe az i-nek többszörösei, nullás (false)hamis értéket rendelünk
lst[j] = False
for i in range(2,n): # Kiíratjuk azoknak az elemeknek az indexét, melyek értéke 1 maradt
if lst[i]:
print i,