Mam taki problem: jak wyznaczyć wszystkie liczby pierwsze z zakresu 1-1000000 i spośród nich wypisać tylko te, które są zbudowane w ten sposób, że każda następna cyfra w liczbie jest o jeden większa od poprzedniej. Np. 23, 67, 4567.
0
0
Sito Eratostenesa + IntToStr + sprawdzanie prostego warunku.
0
Witam, w sumie rozwiazanie latwe :), wyrzezbilem cos takiego:
const
MAXLICZBA = 1000000;
var
Form1 : TForm1;
wynik : array[1..MAXLICZBA div 3] of integer;
Liczba : array[1..15] of char;
dlugosc : byte;
ILE : integer = 0;
implementation
procedure LiczbyPierwsze;
var
i, j : integer;
ok : boolean;
lancuch : string[15];
begin
// od 10 bo wiadomo, ze 2, 3, 5, 7 sa l. pierwszymi
for i := 10 to MAXLICZBA do
// sprawdz czy liczba jest pierwsza (wykorzystaj pewne cechy)
if ((i mod 2) <> 0) and ((i mod 3) <> 0) and
((i mod 5) <> 0) and ((i mod 7) <> 0) then
// jesli jest to sprawdz czy cyfry sa kolejno wieksze
begin // wykorzystaj konwersje int na str
lancuch := IntToStr(i);
dlugosc := length (lancuch);
for j := 1 to dlugosc do
Liczba[j] := lancuch[j];
ok := true;
for j := 1 to dlugosc - 1 do
if Ord(Liczba[j + 1]) - Ord(Liczba[j]) <> 1 then// miala byc wieksza o1
begin
ok := false;
break;
end;
if ok then
begin
Inc (ILE);
Wynik[ILE] := i;
end;
end;
end;
dla twojego zakresu procedura wyrzuca takie liczby:
23
67
89
4567
34567
56789
pozdrawiam
// ŁF dzieki za info, kodzik juz poprawilem ... nie wczytalem sie w tresc :)
0
dRum: to teraz popatrz na swoje wyniki, i na definicję problemu, i zobacz że jedno nie odpowiada drugiemu,
0
Hej dzięki. Dokładnie o to mi chodziło ;)