Skip to content
You signed in with another tab or window.
Reload
to refresh your session.
You signed out in another tab or window.
Reload
to refresh your session.
You switched accounts on another tab or window.
Reload
to refresh your session.
Dismiss alert
{{ message }}
jiangnan0541
Python
Repository navigation
Code
Pull requests
Actions
Projects
Security and quality
Insights
More
items
Files
Expand file tree
master
Breadcrumbs
Python
/
project_euler
/
problem_012
/
sol2.py
Copy path
Blame
More file actions
Blame
More file actions
Latest commit
History
History
History
57 lines (44 loc) · 1.24 KB
master
Breadcrumbs
Python
/
project_euler
/
problem_012
/
sol2.py
Copy path
Top
File metadata and controls
Code
Blame
57 lines (44 loc) · 1.24 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
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
"""
Highly divisible triangular numbers
Problem 12
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?
"""
def
triangle_number_generator
():
for
n
in
range
(
1
,
1000000
):
yield
n
*
(
n
+
1
)
//
2
def
count_divisors
(
n
):
divisors_count
=
1
i
=
2
while
i
*
i
<=
n
:
multiplicity
=
0
while
n
%
i
==
0
:
n
//=
i
multiplicity
+=
1
divisors_count
*=
multiplicity
+
1
i
+=
1
if
n
>
1
:
divisors_count
*=
2
return
divisors_count
def
solution
():
"""Returns the value of the first triangle number to have over five hundred
divisors.
>>> solution()
76576500
"""
return
next
(
i
for
i
in
triangle_number_generator
()
if
count_divisors
(
i
)
>
500
)
if
__name__
==
"__main__"
:
print
(
solution
())
You can’t perform that action at this time.