👤

Python

Liczby pseudolosowe są przydatne w symulacjach, grach (np. rzucanie kostką) i kryptografii. Jednym z prostych sposobów generowania ciągu nieujemnych pseudolosowych liczb całkowitych jest użycie liniowego generatora kongruencyjnego. To działa tak. Ziarno, czyli początkowy numer ciągu, jest w jakiś sposób wybierany. Następna liczba do wygenerowania jest uzyskiwana przez pomnożenie ostatniej liczby wygenerowanej przez pewną liczbę całkowitą A, następnie dodanie kolejnej liczby B, a na koniec wzięcie reszty z dzielenia przez inną liczbę całkowitą C. Wszystkie A, B i C są dodatnie.
Ustalenie, które liczby A, B i C tworzą pozornie losowe ciągi, jest trudne i pozostawimy to matematykom. Tutaj zachowamy prostotę i użyjemy A = 9, B = 5, C = 8. Z tymi liczbami, jeśli ziarnem jest 3, następną liczbę, zero, otrzymujemy w następujący sposób:
pomnóż 3 i A = 9, aby uzyskać 27
dodaj B = 5, aby uzyskać 32
podziel przez C = 8 i weź resztę, czyli 0.
Trzecia liczba w sekwencji to 5, ponieważ:
pomnożenie 0 i 9 daje w wyniku 0
dodanie 5 wyników w 5
dzielenie przez 8 i wzięcie reszty prowadzi do 5.
Ponieważ każda wygenerowana liczba określa następną, gdy następna liczba jest ziarnem, sekwencja zacznie się powtarzać.
Napisz program, który mając nieujemny ziarno liczb całkowitych, wypisuje jeden po drugim pseudolosowy ciąg liczb całkowitych, korzystając z obliczeń opisanych powyżej, i zatrzymuje się, gdy ziarno jest wypisywane ponownie. Wynik dla przykładowej sekwencji pokazano poniżej.
Pole odpowiedzi zawiera Wzorzec 4.5 (Generowanie sekwencji) jako komentarze, aby rozpocząć. Napisz odpowiedni kod pod każdym komentarzem. Użyj nazw zmiennych odpowiednich do danego problemu zamiast nazw ogólnych używanych przez wzorzec. Użyj operacji get_input(), aby uzyskać numer inicjatora. Ta operacja została już wstępnie zdefiniowana. Użyj następującej instrukcji w swoim kodzie: seed = get_input()
Będziesz musiał nieco zmodyfikować wzór, aby uzyskać oczekiwane zachowanie.
Zastanów się, które wartości wejściowe są dopuszczalne, tj. nie doprowadzą do nieskończonej pętli, i umieść to w dokumentacji swojego kodu.
Na przykład:
Wejście
3
Wynik:
3
0
5
2
7
4
1
6
3

# zainicjuj wejścia
# ustaw wartość na pierwszą wartość sekwencji
# wartość wydruku
# gdy warunek zakończenia nie jest spełniony:
# ustaw wartość na następną wartość sekwencji
# wartość wydruku


Odpowiedź :

Wyjaśnienie:

import random

ziarno=int(input('Podaj ziarno różne od 0: '))

b=ziarno

x=0

print(ziarno)

while ziarno!=x:

 x=b

 A=random.randint(1,9)

 B=random.randint(1,9)

 C=random.randint(1,9)

 ziarno=(ziarno*A+B)%C

 print(ziarno)