Multiplication doddling.

This commit is contained in:
Julien Palard 2021-07-16 07:49:39 +02:00
parent 5cd9c8dcc1
commit b0f7dcb43d
Signed by: mdk
GPG Key ID: 0EFC1AC1006886F8
1 changed files with 28 additions and 0 deletions

View File

@ -0,0 +1,28 @@
from hypothesis import given
from hypothesis.strategies import integers
def russian_multiplication(x, y):
columns = [(x, y)]
while x >= 1:
columns.append((x := x // 2, y := y * 2))
return sum(y for x, y in columns if x % 2)
def egyptian_multiplication(x, y):
i = 1
values = [y]
while i < x:
i *= 2
values.append((y := y * 2))
return sum(x for b, x in zip(reversed(f"{x:b}"), values) if b == '1')
@given(integers(min_value=0), integers(min_value=0))
def test_russian_multiplication(x, y):
assert russian_multiplication(x, y) == x * y
@given(integers(min_value=0), integers(min_value=0))
def test_egyptian_multiplication(x, y):
assert egyptian_multiplication(x, y) == x * y