import time
st=time.time()
from math import factorial as f
def C(n,k):
return f(n)//f(k)//f(n-k)
# from functools import lru_cache
# @lru_cache(maxsize=None)
# def C(n,k):
# if k==0 or k==n: return 1
# return C(n-1,k-1)+C(n-1,k)
def gen_prime_sqr(n):
primes = [True]*n
primes[:2] = [False]*2
for i, prime in enumerate(primes):
if prime:
for j in range(i*i, n, i):
primes[j] = False
return [k*k for k, trueprime in enumerate(primes) if trueprime]
prime_sqr = gen_prime_sqr(int(C(50,25)**0.25)+1)
def is_sqrfree(n, prime_sqr=prime_sqr):
for p in prime_sqr:
if n % p == 0:
return False
return True
sqrfreelist = set()
for n in range(0, 51):
for k in range(0, (n+1)//2+1):
if is_sqrfree(C(n,k)):
sqrfreelist.add(C(n,k))
print(sum(sqrfreelist))
print(time.time()-st)
34029210557338
0.015608787536621094 |