Voici un programme qui effectue le crible d'Eratosthène en Pascal.
Celui ci donne tous les nombres premiers en dessous d'un certain rang. Ici 3500 au maximum. La première case indique le nombre de nombres premiers formés. Le programme peut encore être amélioré mais il fait ce dont j'ai besoin !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71 Program Primalite; Uses crt; type tab=array[0..3500] of integer; function next(A:tab;e,N:integer):integer; var f:integer; Begin f:=e+1; while (A[f]=0) and (f<=N) do Begin f:=f+1; end; next:=f; end; procedure erato (var B:tab;N:integer); var i,j,r,h,t: integer; A:tab; Begin for j:=2 to N do Begin A[j]:=j; end; A[1]:=0; i:=2; r:=i; while i<sqrt(N) do Begin h:=i*r; if h<N then Begin A[h]:=0; r:=r+1; end else Begin i:=next(A,i,N); r:=i; end end; t:=1; for i:=2 to N do Begin if A[i]<>0 then Begin B[t]:=A[i]; t:=t+1; end end; t:=t-2; B[0]:=t; end; procedure affiche(var B:tab); var i:integer; Begin for i:=0 to B[0] do write(B[i],' '); end; var N:integer; B:tab; Begin clrscr; write('Donner les nombres premiers inférieurs à ?'); readln(N); erato(B,N); affiche(B); write(''); readln(N); erato(B,2); end.
Voici ce que l'on obtient pour N=1000 :
On a bien le compte, vous pouvez comparer :
https://fr.wikipedia.org/wiki/Liste_de_nombres_premiers
Et ci-dessous, mon post initial, avant que je ne finalise le programme.
Bonsoir,
je travaille sur un programme qui donnerait tous les nombres premiers en dessous d'un certain rang (ici 1000).
Je pense pouvoir me débrouiller seul pour l'idée générale du codage mais j'ai un message d'erreur dont je ne sais me débarrasser.
Quand j'essaie de compiler, le curseur se place sur le e de 'else' ligne 31 et affiche "Error 113: Error in statement.". Ce serait une erreur de Begin et de end mais je ne vois pas vraiment où ...
Merci d'avance !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 Program Primalite; Uses Crt; type tab=array[1..1000] of integer; function next(A:tab,e,N:integer):integer; var f:integer; Begin f:=e+1; while (A[f]=0) and (f<=N) do Begin f:=f+1; end; next:=f; end; procedure erato (var B:tab;N:integer); var i,j,r,h,t: integer; A:tab; Begin for j:=2 to N do Begin A[j]:=j; end; A[1]:=0; i:=2; r:=i; while i<sqrt(n) do Begin h:=i*r; if h<n then A[h]:=0; r:=next(A,r,N); else i:=next (A,i,N); end; t:=1; for i:=2 to N do Begin if A[i]<>0 then B[t]:=A[i]; t:=t+1; end; B[0]:=t; erato:=B; end;
Partager