from math import log2
def Sieve(limit=10**6):
"""Uses Sieve algorithm and stores a factor of each number!
If isPrime[i] = 1, the number 'i' is prime."""
isPrime = [1] * (limit + 1)
isPrime[0] = isPrime[1] = 0
for i in range(2, limit + 1):
if isPrime[i] != 1:continue
for j in range(i * i, limit + 1, i):
if isPrime[j] == 1:isPrime[j] = i
return isPrime
def get_prime_factors(n, isPrime):
"""Returns prime factorisation of n."""
if n < 2:
return []
result = []
while isPrime[n] != 1:
result += [isPrime[n]]
n //= isPrime[n]
result += [n]
return result
isPrime = Sieve(10**6)
def solve(n):
if n == 2:
return 1
minimumOnes, maximumOnes = n - 1 - int(log2(n)), n - 2
for ones in range(minimumOnes, maximumOnes + 1):
remaining = n - ones
for product in range(n + 1, 2 * n + 1):
req_sum = product - ones
factors = get_prime_factors(req_sum, isPrime)
for i in range(2, 100000):
print(i, "->", solve(i))
Comments
0 B
|👍
/👎