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]