2이상 100 이하 a, b에 대해 a^b 형태로 표현할 수 있는 수는 몇 개?
4^2 == 2^4 이런 것 때문에 소인수 분해하고 지지고 볶고 해 봤는데.. 그냥 다 세는 게 나은 듯 하다. 기껏 100*100번 loop도는 건데..
파이썬의 리스트 표현 굳!!
오일러 프로젝트 projecteuler.net 의 문제들을 풀고 설명하는 스터디 공간입니다. 조언, 부연, 비판, 질문 환영합니다.
print len({a**b for a in range(2,101) for b in range(2,101)})
print sum([(i+1)*sum([ord(c)-64 for c in name]) for i,name in enumerate(sorted([name.strip('"') for name in open('p022_names.txt').read().split(',')]))])
ABC = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' alphanum = {} for i,c in enumerate(ABC): alphanum[c] = i + 1 def calcname(name): return sum([alphanum[s] for s in name]) with open('/Users/Dongug/Downloads/p022_names.txt') as f: names = [name.strip('"') for name in f.readline().split(',')] rs = 0 for i,name in enumerate(sorted(names)): rs += (i + 1) * calcname(name) print rs
st = '''75 95 64 17 47 82 18 35 87 10 20 04 82 47 65 19 01 23 75 03 34 88 02 77 73 07 63 67 99 65 04 28 06 16 70 92 41 41 26 56 83 40 80 70 33 41 48 72 33 47 32 37 16 94 29 53 71 44 65 25 43 91 52 97 51 14 70 11 33 28 77 73 17 78 39 68 17 57 91 71 52 38 17 14 91 43 58 50 27 29 48 63 66 04 68 89 53 67 30 73 16 69 87 40 31 04 62 98 27 23 09 70 98 73 93 38 53 60 04 23''' og = [] for line in st.split('\n'): og.append([int(e) for e in line.split()]) for i in range(len(og)-1): og[i+1][0] = og[i][0] + og[i+1][0] for j in range(len(og[i])-1): og[i+1][j+1] = max(og[i][j],og[i][j+1]) + og[i+1][j+1] og[i+1][-1] = og[i][-1] + og[i+1][-1] print max(og[-1])
st = '''75 95 64 17 47 82 18 35 87 10 20 04 82 47 65 19 01 23 75 03 34 88 02 77 73 07 63 67 99 65 04 28 06 16 70 92 41 41 26 56 83 40 80 70 33 41 48 72 33 47 32 37 16 94 29 53 71 44 65 25 43 91 52 97 51 14 70 11 33 28 77 73 17 78 39 68 17 57 91 71 52 38 17 14 91 43 58 50 27 29 48 63 66 04 68 89 53 67 30 73 16 69 87 40 31 04 62 98 27 23 09 70 98 73 93 38 53 60 04 23''' og = [[int(e) for e in line.split()] for line in st.split('\n')][::-1] l = len(og) for i in range(l): for j in range(l - i-1): og[i+1][j] += max(og[i][j],og[i][j+1]) print og[-1][-1]
print sum([int(s) for s in str(2**1000)])
st = ''' 73167176531330624919225119674426574742355349194934 96983520312774506326239578318016984801869478851843 85861560789112949495459501737958331952853208805511 12540698747158523863050715693290963295227443043557 66896648950445244523161731856403098711121722383113 62229893423380308135336276614282806444486645238749 30358907296290491560440772390713810515859307960866 70172427121883998797908792274921901699720888093776 65727333001053367881220235421809751254540594752243 52584907711670556013604839586446706324415722155397 53697817977846174064955149290862569321978468622482 83972241375657056057490261407972968652414535100474 82166370484403199890008895243450658541227588666881 16427171479924442928230863465674813919123162824586 17866458359124566529476545682848912883142607690042 24219022671055626321111109370544217506941658960408 07198403850962455444362981230987879927244284909188 84580156166097919133875499200524063689912560717606 05886116467109405077541002256983155200055935729725 71636269561882670428252483600823257530420752963450''' ns = [int(s) for s in st.replace('\n','')] def prod(l): r = 1 for i in l: r*= i return r mx = 0 ndigit = 13 for i in range(len(ns)-ndigit): if 0 not in ns[i:i+ndigit]: p = prod(ns[i:i+ndigit]) if p > mx: mx = p print mx
from operator import mul mx = 0 ndigit = 13 for i in range(len(ns)-ndigit): if 0 not in ns[i:i+ndigit]: p = reduce(mul,ns[i:i+ndigit]) if p > mx: mx = p
ns = [s for s in st.replace('\n','').split('0') if len(s) >= 13] from operator import mul def findmx(s): t = [int(x) for x in s] p = mx = reduce(mul,t[:13]) for i in range(13,len(t)): p /= t[i-13] p *= t[i] mx = max(p,mx) return mx gmx = 1 for s in ns: gmx = max(findmx(s),gmx) print gmx
sum(range(101)) ** 2 - sum([x*x for x in range(101)])
sm1 = sm2 = 0 for i in range(101): sm1 += i sm2 += i*i print sm1**2 - sm2