Liczby Mersenne

0

Mam takie zadanie z którym nie mogę sobie poradzić:
Liczba Mersenne'a to liczba pierwsza postaci 2^p-1, przy czym p samo jest
liczbš pierwszš. Napisz program znajdujšcy takie liczby w przedziale [1, a].

już kompletnie zgłupiałem nad tym programem doszedlem do czegoś takiego:

uses math;
procedure TForm1.Button1Click(Sender: TObject);
Var N, K : Integer;
    i,b,d, j : Integer;
    Licz : Integer;
    potega:extended;
    y:string;

begin

  Repeat
N:=Strtoint(Edit1.Text);


  Until (N > 1);


 For i:=1 To N Do Begin
                    Licz :=0;
                    For j:=1 To N Do
                       potega := (power(2,j)-1);
                       y:=(floattostr(potega));
                        b:=strtoint(y);
                       If ((b mod j) = 0) Then Licz:=Licz+1;
                       If Licz = 2 Then Begin
                       listbox1.Items.Add(inttostr(i));
                        end;

 end;
 end;
end. 

i nie wiem co jest nie tak
nie wpisuje wartości do listbox
a przy wpisaniu liczby powyżej 1000 wyskakuje błąd że przekracza zakres
prosze o pomoc i o jakies rady

0

A wtedy Bóg stworzył formatowanie kodu i odpowiednie znaczniki na forach aby kod ten wyglądał czytelnie i widział Bóg, że było to dobre.

Brakuje Ci begin i end w drugiej pętli for, bo teraz wykonuje się tylko instrukcja

potega := (power(2,j)-1);

oraz nigdzie nie wykorzystujesz zmiennej i, wydaje mi się, ze powinieneś liczyć potęgę w ten sposób:

b := i*i-1; 

Zamiast bawić się w dziwną zamianę extended do string, a potem do integer.
Dodatkowo ty liczysz wszystkie liczby które mają postać: i2-1 (ew. N2-1, jeżeli nie uwzględnisz moich uwag), nie sprawdzając czy i jest pierwsze, a wynik tego może leżeć poza przedziałem [1,a].

0

ale jak i*i jeżeli tu trzeba zkorzystać ze wzoru 2^i

2^5=32 5*5=25 więc to są calkiem inne wyniki...

1 użytkowników online, w tym zalogowanych: 0, gości: 1