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ź.
[Python][Python3] pierwiastek i liczby doskonałe
-
- 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
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:
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}\).
\(\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