Extract prime factor functions (from 3 & 5) into util.py

This commit is contained in:
Linus Miller 2018-03-28 20:29:17 +02:00
parent 5e518627e5
commit 7adc277e90
3 changed files with 46 additions and 71 deletions

55
0003.py
View File

@ -1,57 +1,12 @@
from functools import reduce from functools import reduce
target = 600851475143
# list = []
# for num in range(1, int(target / 2)):
# print(num)
# if (target % num == 0):
# list.append(num)
# 2^x - 1 6k - 1
# print(list)
factors = []
def findLargestPrimeFactor(n):
primeFactor = 1
factors.append(primeFactor)
print('appended')
i = 2
while i <= n / i:
if n % i == 0:
factors.append(i)
primeFactor = i
n = int(n / i)
else:
i += 1
if primeFactor < n:
primeFactor = n
return primeFactor
def findPrimeFactors(n):
factors = []
i = 2
while i <= n / i:
if n % i == 0:
factors.append(i)
n = int(n / i)
else:
i += 1
factors.append(n)
return factors
import util
target = 600851475143 target = 600851475143
# print(findLargestPrimeFactor(target)) factors = util.find_prime_factors(target)
factors = findPrimeFactors(target)
print(factors)
result = reduce((lambda x, y: x * y), factors) result = reduce((lambda x, y: x * y), factors)
print(result) print(result)
print(findPrimeFactors(48)) print(result == target)

26
0005.py
View File

@ -1,27 +1,14 @@
from collections import Counter from collections import Counter
from functools import reduce from functools import reduce
import util
def find_prime_factors(n): target = 232792560
factors = []
i = 2
while i <= n / i:
if n % i == 0:
factors.append(i)
n = int(n / i)
else:
i += 1
factors.append(n)
return factors
def divisible(rng): def divisible(rng):
factors = None factors = None
for num in rng: for num in rng:
nums = find_prime_factors(num) nums = util.find_prime_factors(num)
count = Counter(nums) count = Counter(nums)
if (factors == None): if (factors == None):
@ -32,18 +19,15 @@ def divisible(rng):
factors[key] = value factors[key] = value
return factors return factors
# max_num = max(rng)
factors = divisible(range(1, 21)) factors = divisible(range(1, 21))
# print(factors)
# reduce(def fnc(value, key): print(value), factors.items())
result = 1 result = 1
for key, value in factors.items(): for key, value in factors.items():
result *= key ** value result *= key ** value
print(result) print(result)
print(result == target)

36
util.py Normal file
View File

@ -0,0 +1,36 @@
def find_largest_prime_factor(n):
prime_factor = 1
factors.append(prime_factor)
print('appended')
i = 2
while i <= n / i:
if n % i == 0:
factors.append(i)
prime_factor = i
n = int(n / i)
else:
i += 1
if prime_factor < n:
prime_factor = n
return prime_factor
def find_prime_factors(n):
factors = []
i = 2
while i <= n / i:
if n % i == 0:
factors.append(i)
n = int(n / i)
else:
i += 1
factors.append(n)
return factors