[Delphi][Lazarus] Liczba doskonała

ulka_59
Użytkownik
Użytkownik
Posty: 3
Rejestracja: 27 sty 2015, o 15:24
Płeć: Kobieta
Lokalizacja: Polska

[Delphi][Lazarus] Liczba doskonała

Post autor: ulka_59 »

Liczba doskonała to taka liczba, która jest równa sumie wszystkich swoich dzielników mniejszych od niej samej. Wyznacz wszystkie liczby doskonałe mniejsze od danego \(\displaystyle{ n}\).

Pomoże ktoś?

Z góry dziękuję.
Ostatnio zmieniony 27 sty 2015, o 20:09 przez Afish, łącznie zmieniany 1 raz.
Powód: Poprawa wiadomości.
Awatar użytkownika
sebnorth
Użytkownik
Użytkownik
Posty: 635
Rejestracja: 12 sty 2011, o 16:27
Płeć: Mężczyzna
Lokalizacja: Puck i Trójmiasto
Pomógł: 201 razy

[Delphi][Lazarus] Liczba doskonała

Post autor: sebnorth »

W Pythonie: program wypisuje wszystkie do 1000

Kod: Zaznacz cały

def sumadzielinkow(n):
    suma = 0
    for i in range(1, n//2+1):
        if n % i == 0:
            suma += i
    return suma

def doskonala(n):
    return sumadzielinkow(n) == n


def doskonala1000():
    lista = [n for n in range(1, 1000) if doskonala(n)]
    return lista

print doskonala1000()
# [6, 28, 496]
ksisquare
Użytkownik
Użytkownik
Posty: 132
Rejestracja: 1 cze 2012, o 07:04
Płeć: Mężczyzna
Lokalizacja: Polska
Pomógł: 15 razy

[Delphi][Lazarus] Liczba doskonała

Post autor: ksisquare »

Kod: Zaznacz cały

var
  p, i, n: longword;   //32 bity
  s, n1: int64;      //64 bity
 
begin
  p:=2;
  n:=3;  // n  = 2^p - 1
  n1:=2; // n1 = 2^(p-1)
         // n1*n może być liczbą doskonałą
  repeat
 
    s:=4;                   // 1. Lucas-Lehmer test
    for i:=3 to p do        // 2. 
      s:=(s*s - 2) mod n;   // 3. 
    if (s=0) or (p=2) then  // 4. 
 
       writeln('Mersenne=2^', p:2, '-1=', n:12, ',  perfect number = ', n1*n);
    p+=1;
    n1:=n+1;
    n:=2*n+1;
  until p>31;
end.
ODPOWIEDZ