You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
25 lines
728 B
25 lines
728 B
from hypothesis import given
|
|
from hypothesis import strategies as st
|
|
from sympy import divisors
|
|
from sympy.functions.combinatorial.numbers import divisor_sigma, totient
|
|
from sympy.ntheory.primetest import is_square
|
|
|
|
|
|
@given(n=st.integers(1, 10**10))
|
|
def test_tau_hypothesis(n):
|
|
div = divisors(n)
|
|
tau_n = len(div)
|
|
assert is_square(n) == (tau_n % 2 == 1)
|
|
sigmas = [divisor_sigma(i) for i in div]
|
|
totients = [totient(n // i) for i in div]
|
|
mul = [a * b for a, b in zip(sigmas, totients)]
|
|
assert n * tau_n == sum(mul)
|
|
|
|
|
|
@given(n=st.integers(1, 10**10))
|
|
def test_totient_hypothesis(n):
|
|
assert totient(n) <= n
|
|
div = divisors(n)
|
|
totients = [totient(i) for i in div]
|
|
assert n == sum(totients)
|