-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path12.py
64 lines (53 loc) · 1.54 KB
/
12.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# Problem 12
# Highly Divisible Triangular Number
# The sequence of triangle numbers is generated by adding the natural numbers. So the 7th triangle number would be 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ...
# Let us list the factors of the first seven triangle numbers:
# 1: 1
# 3: 1, 3
# 6: 1, 2, 3, 6
# 10: 1, 2, 5, 10
# 15: 1, 3, 5, 15
# 21: 1, 3, 7, 21
# 28: 1, 2, 4, 7, 14, 28
# We can see that 28 is the first triangle number to have over five divisors.
# What is the value of the first triangle number to have over five hundred divisors?
import math
import itertools
target = 500
i = 1
def primeFactors(number):
original = number
factors = []
while True:
if number % 2 == 0:
factors.append(2)
number /= 2
else:
break
for i in range(3, math.ceil(math.sqrt(original)) + 1, 2):
while True:
if number % i == 0:
factors.append(i)
number /= i
else:
break
if len(factors) == 0:
factors.append(original)
return factors
while True:
factors = primeFactors(i) + primeFactors(i+1)
factors.remove(2)
allFactors = []
for j in range(len(factors)+1):
for item in list(itertools.combinations(factors, j)):
product = 1
for number in item:
product *= number
allFactors.append(product)
allFactors = list(dict.fromkeys(allFactors))
if len(allFactors) >= target:
break
i += 1
answer = allFactors[-1]
print(answer)
# 76576500