Witam, mam do napisania program, który będzie sprawdzał czy dana liczba jest liczbą super pierwszą i będzie wypisywał liczby pierwsze z wyznaczonego zakresu.
Liczba super pierwsza to liczba pierwsza, której suma cyfr daje liczbę pierwszą. np. 11, 17, 23
Napisałem więc program, który sprawdza czy dana liczba jest liczbą super pierwszą:
var
a, l1, p1, wynik:integer;
begin
a:=StrToInt(Edit1.Text);
l1 := 0;
p1 := 1;
wynik := 0;
for p1 := 1 to a do
if a mod p1 = 0 then
begin
l1 := l1 + 1;
end;
begin
if l1 = 2 then
begin
while a <> 0 do
begin
wynik := wynik + (a mod 10);
a := a div 10;
end;
for p1 := 1 to wynik do
if wynik mod p1 = 0 then
begin
l1 := l1 + 1;
end;
begin
if l1 = 2 then
Edit2.Text:='NIE'
else
Edit2.Text:='TAK';
end;
end
else
Edit2.Text:='NIE';
end;
end;
Wszystko działa tak jak chce, tylko teraz mam problem z drugą częścią, kiedy próbuje zrobić pętle tak żeby wartość była podnoszona co pętle o 1 i sprawdzana czy jest liczbą super pierwszą to program mi się zapętla.
Chodzi mi oto, że w Edit1 użytkownik wprowadza wartość do której będzie się kończył zakres, a w Memo1. Lines będą wypisywane kolejne liczby super pierwsze:
var
a, b, l1, p1, wynik:integer;
begin
b:=StrToInt(Edit1.Text);
l1 := 0;
p1 := 1;
wynik := 0;
repeat
a:=a+1;
for p1 := 1 to a do
if a mod p1 = 0 then
begin
l1 := l1 + 1;
end;
begin
if l1 = 2 then
begin
while a <> 0 do
begin
wynik := wynik + (a mod 10);
a := a div 10;
end;
for p1 := 1 to wynik do
if wynik mod p1 = 0 then
begin
l1 := l1 + 1;
end;
begin
if l1 = 2 then
else
Memo1.Lines.Add(IntToStr(a));
end;
end
else
end;
until a = l;
end;
Z góry dziękuje za pomoc w rozwiązaniu problemu.