[Python][Python3] pierwiastek i liczby doskonałe

SallyAnn
Użytkownik
Użytkownik
Posty: 1
Rejestracja: 2 lis 2014, o 11:21
Płeć: Kobieta
Lokalizacja: Polska

[Python][Python3] pierwiastek i liczby doskonałe

Post autor: SallyAnn »

Dopiero zaczynam przygodę z programowaniem w Pythonie 3. Mam 2 zadania do rozwiązania i prosiłabym o pomoc.
1. Wyznacz stosunkowo dobre przybliżenie liczby \(\displaystyle{ \sqrt[1000]{1000!}}\) .
Tutaj chciałam skorzystać ze wzoru Stirlinga na przybliżoną wartość silni, ale też nie wylicza, bo liczba jest zbyt duża.
2. Znajdź wszystkie liczby doskonałe mniejsze od 1000. Wyznacz wszystkie zaprzyjaźnione pary liczb mniejszych niż 1000.

Byłabym wdzięczna za odpowiedź/podpowiedź.
Afish
Moderator
Moderator
Posty: 2828
Rejestracja: 15 cze 2008, o 15:45
Płeć: Mężczyzna
Lokalizacja: Seattle, WA
Podziękował: 3 razy
Pomógł: 356 razy

[Python][Python3] pierwiastek i liczby doskonałe

Post autor: Afish »

1. Pierwiastek iloczynu to iloczyn pierwiastków.
2. W czym potrzebujesz pomocy?
Adifek
Użytkownik
Użytkownik
Posty: 1567
Rejestracja: 15 gru 2008, o 16:38
Płeć: Mężczyzna
Lokalizacja: Ostrzeszów/Wrocław
Podziękował: 8 razy
Pomógł: 398 razy

[Python][Python3] pierwiastek i liczby doskonałe

Post autor: Adifek »

1. Ze względu na zakres liczb, liczenie \(\displaystyle{ 1000!}\) nie wchodzi w grę. Proponuję policzyć to jako
\(\displaystyle{ \prod_{i=2}^{1000} \sqrt[1000]{i}}\). Możesz to policzyć w pętli albo rekurencyjnie. Wtedy pozostaje jedynie kwestia dobrego przybliżenia pierwiastka. Najlepiej liczyć to rekurencyjnie:

... go_stopnia

żeby dostać dobre przybliżenie końcowego wyniku, w pośrednich pierwiastkach musisz wykonać dość dużo iteracji. Co prawda i tak stracisz na dokładności, ale nie będzie obawy, że osiągniesz zbyt duże liczby. Dla lepszej dokładności możesz też grupować liczby np. po 5:

\(\displaystyle{ \prod_{i=1}^{200} \sqrt[1000]{5i(5i-1)(5i-2)(5i-3)(5i-4)}}\)

itd. itp. Możliwości jest wiele.

2. Tutaj niestety trzeba użyć podwójnej pętli. Na co dzień raczej nie piszę w pythonie, ale wyznaczanie liczb doskonałych wyglądłoby jakoś tak:

Kod: Zaznacz cały

def sumadzielnikow(n)
    wyniki = [0]*1000
    for x in range(1,n+1)
        j=1
        while j<=sqrt(x)
            if x%j != 0
                wyniki[x-1]+=j
    return wyniki
W ten sposób otrzymasz listę \(\displaystyle{ wyniki}\) taką, że \(\displaystyle{ wyniki[k-1]=\sigma (k)}\) (w notacji Twojej listy zadań). Żeby znaleźć liczby doskonałe, wystarczy, że wypiszesz te elementy listy \(\displaystyle{ wyniki}\), dla których \(\displaystyle{ wyniki[k-1]=k}\). Liczby \(\displaystyle{ k,m}\) będą zaprzyjaźnione jeśli \(\displaystyle{ wyniki[k-1]=m}\) oraz \(\displaystyle{ wyniki[m-1]=k}\).
ODPOWIEDZ