Bonjour/Bonsoir,

Je suis nouveau sur ce forum et j'ai grandement besoin de votre aide sur Turbo Pascal.

En effet, j'ai écrit un programme récemment qui s'arrête tout seul à mi chemin...


Alors pour expliquer :
J'ai écrit un programme qui me permet de trouver des paires de nombres amicaux et parfaits. Je ne sais pas si vous voyez ce que c'est.

En fait, quand on fait la somme des diviseurs stricts d'un nombre A, on tombe sur un nombre B, et quand on fait la somme des diviseurs stricts du nombre B, on retombe sur le nombre A.
(Les diviseurs stricts d'un nombres sont tous les diviseurs hormis ce nombre lui-même.
Ex : diviseurs stricts de 6 : 1,2,3
On constate que 6 est un nombre parfait car on retombe sur lui)

Le principe est de tester tous les entiers à partir de 4 (le premier entier qui n'est pas un "nombre premier") jusqu'à tomber sur soit un nombre parfait, soit une paire de nombres amicaux.

Enfin voilà, le problème c'est qu'à partir de 960, le programme s'arrête...
J'ai bien essayé de mettre des "longint" à la place des "integer" pour les variables, mais ça ne change rien...

Enfin, voilà mon programme :
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
 
program nombres_amis(output);
uses crt;
type tableau = array [1..20] of longint;
type tableau2 = array [1..20] of longint;
var x,y,test,nombre,nombre2,indice,somme_div,somme_div2,boucle:longint;
var a : tableau;
var b : tableau2;
 
begin
clrscr;
textcolor(white);
 
{Nettoyage de la m‚moire}
x:=0;
y:=0;
test:=0;
nombre:=0;
nombre2:=0;
indice:=0;
somme_div:=0;
somme_div2:=0;
boucle:=0;
 
              {====CHOIX DU NOMBRE====}
                     nombre:=497;
 
repeat
clrscr;
 
{///////////////////////////PARTIE 1////////////////////////}
 
writeln('nombre : ',nombre);
 
{J'initialise les variable et le tableau}
x:=2;
for indice:=1 to 20 do a[indice]:=0;
indice:=1;
y:=nombre div 2;
 
{Je test pour trouver les diviseurs}
for x:= 2 to y do
begin
test:= nombre mod x;
    if test=0 then
    begin
    a[indice]:=x;
    indice:= indice+1;
    end
end;
 
{je fais la somme des diviseurs}
somme_div:=0;
for indice:= 1 to 20 do somme_div:= somme_div+a[indice];
somme_div:=somme_div+1;
 
writeln('somme des diviseurs ',somme_div);
 
{///////////////////////////PARTIE 2////////////////////////}
 
nombre2:=somme_div;
 
{J'initialise les variable et le tableau}
x:=2;
for indice:=1 to 20 do b[indice]:=0;
indice:=1;
y:=nombre2 div 2;
 
{Je test pour trouver les diviseurs}
for x:= 2 to y do
begin
test:= nombre2 mod x;
    if test=0 then
    begin
    b[indice]:=x;
    indice:= indice+1;
    end
end;
 
{je fais la somme des diviseurs}
somme_div2:=0;
for indice:= 1 to 20 do somme_div2:= somme_div2+b[indice];
somme_div2:=somme_div2+1;
 
 
writeln('somme des diviseurs ',somme_div2);
 
{Je test l'‚galit‚ pour sortir de la boucle}
boucle:=0;
if nombre=somme_div2 then boucle:=boucle+1;
 
 
{J'incr‚mente le nombre principale d'1}
nombre:=nombre+1;
 
 
until boucle=1;
 
readln;
nombre:=nombre-1;
writeln(nombre);
readln;
 
end.
(apparemment le spoiler ne fonctionne pas ici ?)

Enfin, si vous avez une idée d'où ça peut bloquer, dites-moi svp.

Merci d'avance

EDIT : merci pour les balises CODE