본문 바로가기

오일러프로젝트

(27)
[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..
[EP 047] 소인수분해의 소수의 갯수가 4개 문제는 이렇다. 644는 소인수분해하였을 때, 22 x 7 x 23 으로 세 개의 서로다른 소수로 이루어진다. n, n+1, n+2, n+3 이 모두 네 개의 서로다른 소수로 이루어지는 최소의 n을 구하라. 1부터 차례대로 소인수분해를 해 나가야 하기 때문에, 완전한 소수의 리스트를 관리할 수 있다. 소수판정이 매우 효율적이라서 기쁘다. 또한 소인수분해를 기록하는 리스트도 기록해 나가는데, 일단 하나의 소수만 발견하면 기록된 리스트를 이용해서 매우 효율적으로 원하는 값을 구할 수 있다. 소스를 봐라. # Author : DwYoon # PROJECT EULER # http://projecteuler.net/index.php?section=problems&id=47 # PROBLEM 47 import ti..
[EP 078] 동전 나누기 문제 78 : p(n)을 n개의 동전을 무더기로 나누는 경우의 수라고 하자. 예를 들어서, 5개의 동전이 있다면, 다음과 같이 7가지 방법이 있어서, p(5) = 7이 된다. ooooo oooo o ooo oo ooo o o oo oo o oo o o o o o o o o 해법 : Q(n, m) 을 n개의 동전을 나눌 때 가장 큰 무더기를 이루는 갯수가 m개인 경우의 수라고 한다. 위 예에서 보면, Q(5,5) = 1 Q(5,4) = 1 Q(5,3) = 2 Q(5,2) = 2 Q(5,1) = 1 이 되는 것을 알 수 있다. 이렇게 정의한 Q(n, m)에서 다음과 같은 식이 항상 성립함을 알 수 있다. Q(n, n) = 1 Q(n, 1) = 1 m Q(n, m) = sum Q(n-m, i) i = 1 마지..
[EP 077] 소수의 합으로 나타내는 경우의 수 오일러 프로젝트 77번 문제. 10을 소수들의 합으로 나누는 경우의 수는 다음과 같이 다섯가지이다. 7+3 5+5 5+3+2 3+3+2+2 2+2+2+2+2 소수들의 합으로 나누는 경우의 수가 처음으로 5000을 넘는 수는 무엇인가? from typing import Set, Dict from functools import lru_cache from pprint import pprint primes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97] @lru_cache() def summations(n: int) -> Set: # print(">"*depth + str(n)) # ..
[EP019] 윤년 1901년 1월부터 2000년 12월까지 중에서 1일이 일요일인 달의 갯수를 구하는 문제. 윤년을 구하는 조건이 주어지고, 그 조건만 잘 써 주고, mod 7을 이용하면 요일을 구할 수 있다. // leap_year.cpp : Defines the entry point for the console application. // /* http://projecteuler.net *____________________________________________________________________ Problem 19 14 June 2002 You are given the following information, but you may prefer to do some research for yourself. ..
[EP 032] 복면산 39 x 186 = 7254 39 x 186 = 7254 란 등식에는 1부터 9까지의 모든 수가 등장한다. A x B = C 꼴이 되고 1부터 9까지의 숫자를 한번씩 모두 사용할 수 있도록 표현되는 C가 되는 모든 C의 합은 얼마일까? (A' x B' = A x B = C 인 C도 있으나 한번만 합산한다.) 무한 for문 겹치기 신공으로 무식하게 풀었다. #!/usr/bin/env python # http://projecteuler.net/index.php?section=problems&id=32 # # Solve # #### abc #### #### x de #### #### ----- #### #### fghi #### # # Or # #### abcd #### #### x e #### #### ----- #### #### fg..
[EP 092] T(n) = n의 각 자리수의 제곱의 합. T(T(T(..(n)...))) = n 이 되는 n은 1과 89 # http://projecteuler.net # Problem 92 # 2 2 2 2 2 # 89 -> 8 + 9 = 145 -> 1 + 4 + 5 = 42 -> 20 -> 16 -> 37 -> 58 -> 89 -> ... -> 89 # 1 -> 1 -> 1 from functools import lru_cache import time from tqdm import tqdm BIGN = 10 ** 7 sol_dict = dict() sol_dict[0] = 0 sol_dict[1] = 1 sol_dict[89] = 89 digit_sq = [i * i for i in range(10)] @lru_cache def arrives_at_89_recur(n: int): if n == 0 or n == 1 o..
[EP 048] ∑ i^i (i=1 ~ 1000) 의 마지막 10자리수 구하기 #!/usr/bin/python ############################################################################ # # Problem 48 # 18 July 2003 # 1 2 3 10 # The series, 1 + 2 + 3 + ... + 10 = 10405071317. # # Find the last ten digits of the series, # 1 2 3 1000 # 1 + 2 + 3 + ... + 1000 . ############################################################################ # Author : DwYoon # Date : 2007 04 12 def pow_mod(b..