-
Notifications
You must be signed in to change notification settings - Fork 0
/
problem029.py
40 lines (32 loc) · 1.21 KB
/
problem029.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
# Consider all integer combinations of a**b for 2 <= a <= 5 and 2 <= b <= 5:
#
# 2**2=4, 2**3=8, 2**4=16, 2**5=32 3**2=9, 3**3=27, 3**4=81, 3**5=243 4**2=16, 4**3=64,
# 4**4=256, 4**5=1024 5**2=25, 5**3=125, 5**4=625, 5**5=3125 If they are then placed
# in numerical order, with any repeats removed, we get the following
# sequence of 15 distinct terms:
#
# 4, 8, 9, 16, 25, 27, 32, 64, 81, 125, 243, 256, 625, 1024, 3125
#
# How many distinct terms are in the sequence generated by ab for 2 <= a <= 100
# and 2 <= b <= 100?
import math
import itertools
from common_funcs import answer, prime_expansion
def exponent_gen(a,b):
exps = []
pf_a = prime_expansion(a)
for x in pf_a:
x_count = pf_a.count(x)
exps.append([x, x_count * b])
# http://stackoverflow.com/questions/2213923/python-removing-duplicates-from-a-list-of-lists
exps = list(exps for exps,_ in itertools.groupby(exps))
return exps
def solve():
unique_terms = []
for a in range(2,101):
for b in range(2,101):
exps = exponent_gen(a,b)
if exps not in unique_terms:
unique_terms.append(exps)
return len(unique_terms)
answer(solve)