-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathProblem12.py
64 lines (60 loc) · 1.54 KB
/
Problem12.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
import math
# The sequence of triangle numbers is generated by adding the natural numbers.
# So the 7th triangle number would be 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28.
# The first ten terms 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?
# Poprawiona, bardziej optymalna metoda:
def rozklad(x):
k = 2
while x != 1:
while x % k == 0:
x //= k
czynniki.append(k)
k += 1
liczba = 1
i = 2
while True:
liczba += i
czynniki = []
suma = 1
rozklad(liczba)
mi = min(czynniki)
ma = max(czynniki)
potegi = []
for czynnik in range(mi, ma + 1):
s = 0
for z in czynniki:
if czynnik == z:
s += 1
if s >= 1:
potegi.append(s)
for j in potegi:
element = j
suma *= (element + 1)
if suma > 500:
print("Wynik: ", liczba)
break
i += 1
# Poprzednia metoda (mało optymalna)
# liczba=0
# i=1
# while True:
# liczba += i
# suma=2 #suma dzielników; dzieli się przez 1 i siebie
# for x in range(2, math.ceil(liczba/2 +1)):
# if liczba % x == 0:
# suma+=1
# if suma>500:
# print("Wynik: ", liczba)
# break
# print(liczba, suma)
# i+=1