본문 바로가기

조합

(6)
[EP0062] 같은 숫자로 이루어진 세제곱이 다섯개 #!/usr/bin/env python # Project Euler 62 # http://projecteuler.net/index.php?section=problems&id=62 # Problem 62 # # The cube, 41063625 (3453), can be permuted to produce two other cubes: # 56623104 (3843) and 66430125 (4053). In fact, 41063625 is the smallest # cube which has exactly three permutations of its digits which are also # cube. # # Find the smallest cube for which exactly five permut..
[Python] 이항분포 그래프 그리기 import sys from functools import lru_cache import math import numpy as np import matplotlib.pyplot as plt @lru_cache(None) def ncr(n, r): """조합. 재귀식을 이용함. n이 커지면 스택오버플로우 발생. """ if r in (0, n): return 1 return ncr(n - 1, r) + ncr(n - 1, r - 1) def bidist(n, p): """이항분포""" q = 1 - p dist = np.array([ncr(n, k) * (p ** k) * (q ** (n - k)) for k in range(n + 1)]) return dist def bicoeff(n): """이항계수...
nCr 캐시된 재귀함수로 구하기 Python 3.4.4 (v3.4.4:737efcadf5a6, Dec 20 2015, 20:20:57) [MSC v.1600 64 bit (AMD64)] on win32Type "copyright", "credits" or "license()" for more information.>>> def nCr(n, r):if r in (n, 0);SyntaxError: invalid syntax>>> @functools.lur_cache(maxsize=200, typed=False)def nCr(n, r):if r in (n, 0):return 1return nCr(n-1, r-1) + nCr(n-1, r) Traceback (most recent call last): File "", line 1, in @fu..
[Euler Project 090] itertools 의 combinations 를 가져다 씀. 좀 반칙성으로 브루트포스 풀이. 그냥 문제의 요구를 그대로 코딩했음. 문제가 좀 애매한 부분이 있었는데, 두 주사위를 다른 것으로 볼 것이냐 아니면 같은 것으로 볼 것이냐... 그래서 계속 답이 틀렸음. 검색해서 다른 사람의 풀이를 보고 문제의 의도를 알아낼 수 있었음.
[Euler Project 203] 소수제곱없는 이항계수의 합 구하기 0C0 부터 50C50 까지의 이항계수들 가운데에 소인수분해하여, 제곱이상의 인자가 없는 것들의 합을 구하는 것. 트릭은 nCr = n x ((n-1)C(r-1) / r 이라는 관계식을 이용하는 것, 수를 50이하의 소수 (15개)의 거듭제곱수의 리스트로 표현하여 곱과 나누기의 오버헤드를 줄이고, 제곱 이상의 인자가 없는지 확인하기 편하게 하는 것.아래 코드는 좀 지져분하다. #!/usr/bin/env python def MUL(l1, l2, l3): n = len(primes) #l3 = [ 0 ] * n for i in range(n): l3[i] = l1[i]+l2[i] return def DIV(l1, l2, l3): n = len(primes) #l3 = [ 0 ] * n for i in ran..
[Py] 중복된 숫자 집합을 주어진 합으로 분할하기 #!/usr/bin/env python def is_two_listlist_identical(lla, llb): #print "XXXXXXXXXXXXXXXXXXXXXXX" #print lla #print llb for i in range(len(lla)): la = lla[i] lb = llb[i] if len(la) != len(lb): return False else: if len(la) != 0: for j in range(len(la)): if la[j] != lb[j]: return False return True def is_already_in(lll, ll): la = [ le for le in ll ] for e_ll in lll: lb = [ le for le in e_ll ] if is..