Zad1 Szybkie potęgowanie. Aby wyliczyć a**105 możesz liczbę a
Transkrypt
Zad1 Szybkie potęgowanie. Aby wyliczyć a**105 możesz liczbę a
Zad1 Szybkie potęgowanie. Aby wyliczyć a**105 możesz liczbę a mnożyć 104 razy. Inaczej można to uzyskać licząc najpierw a**52 potem wynik podnosząc do kwadratu i ostatecznie mnożąc przez a. Stosując powyższą obserwację napisz funkcję rekurencyjną sp(a,n), której wartością będzie a**n. Zad2 Napisz funkcję (generator) napisy(l1,n1,l2,n2,l3,n3), której argumentami są trzy litery i trzy liczby naturalne, a wartościami wszystkie takie napisy, w których litera l1 występuje n1 razy, litera l2 występuje n2 razy, litera l3 występuje n3 razy. Efektem działania: for i in napisy('a',2,'b',1,'c',0):print(i) ma być: aab aba baa lub te same napisy w jakiejś innej kolejności Zad3 Napisz funkcję (generator) csr(n), której argumentem jest liczba naturalna>0 a wartościami wszystkie ciągi (listy) rosnące c o wartościach w zbiorze {1,2,...,n}, takie, że różnice dwu kolejnych wyrazów są większa od 1. Efektem działania: for i in csr(3):print(i) ma być: [1] [2] [3] [1,3] lub te same napisy w jakiejś innej kolejności. Efektem działania: for i in csr(5):print(i) ma być: [1] [2] [3] [4] [5] [1,3] [2,4] [3,5] [1,4] [2,5] [1,5] [1,3,5] (w dowolnej kolejności) Zad4(dodatkowe, nieobowiązkowe) Napisz generator C(n) zwracający wszystkie ciągi (listy) o sumie 0, długości 2n, o wyrazach 1 i -1 takie, że wszystkie sumy częściowe są nieujemne. C(0) ma zwrócić [] C(1) ma zwrócić [1,-1] C(2) ma zwrócić (w dowolnej kolejności) [1,-1,1,-1], [1,1,-1,-1] C(3) ma zwrócić [1,-1,1,-1,1,-1], [1,-1,1,1,-1,-1], [1,1,1,-1,-1,-1], [1,1,-1,1,-1,-1], [1,1,-1,-1,1,-1]