Najpierw może skupmy się na funkcji sprawdzającej czy zadana liczba jest liczbą pierwszą; Nie podałeś nazwy środowiska którego używasz do pisania kodu, więc podam przykład dla kompilatora FPC:
function IsPrimeNumber(ANumber: Integer): Boolean;
var
LDivider: Integer = 2;
begin
while (ANumber > LDivider) and (ANumber mod LDivider <> 0) do
LDivider += 1;
Result := ANumber = LDivider;
end;
Prawda, że prościej, krócej i czytelniej? Teraz czas na funkcję, która w argumencie przyjmie indeks liczby pierwszej (ten ustalony indeks według zadanego schematu), a zwróci wartość szukanej liczby:
function PrimeNumberByIndex(AIndex: Integer): Integer;
begin
Result := 1;
while AIndex >= 0 do
begin
Result += 1;
while not IsPrimeNumber(Result) do
Result += 1;
AIndex -= 1;
end;
end;
Powyższa funkcja też nie wydaje się być skomplikowana, więc nie ma co tłumaczyć; Chyba że czegoś nie rozumiesz to daj znać, a opiszę jej działanie; W każdym razie i tak przeanalizuj ten kod, abyś wiedział jak działa i dlaczego działa; Pozostał jeszcze kod używający tej funkcji:
var
LIndex: Integer = 0;
begin
while LIndex < 20 do
begin
WriteLn(LIndex:2, ' - ', PrimeNumberByIndex(LIndex));
LIndex += 1;
end;
end.
Służy do wypisania na ekranie wartości pierwszych dwudziestu liczb pierwszych, o przyjętych indeksach z zakresu od 0
do 19
; Wyjście w konsoli wyglądać będzie następująco:
0 - 2
1 - 3
2 - 5
3 - 7
4 - 11
5 - 13
6 - 17
7 - 19
8 - 23
9 - 29
10 - 31
11 - 37
12 - 41
13 - 43
14 - 47
15 - 53
16 - 59
17 - 61
18 - 67
19 - 71
http://ideone.com/u4VK7x