일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 소인수분해
- Python
- 오일러 프로젝트
- backpropagation
- 비샤몬당
- 신경망
- 자전거 여행
- 냥코 센세
- bayesian
- 딥러닝
- Autoencoder
- 수달
- 오토인코더
- 전처리
- deep learning
- c#
- Gram matrix
- SQL
- 소수
- Convolutional Neural Network
- 히토요시
- 합성곱 신경망
- 역전파법
- CNN
- 베이지안
- 역전파
- neural network
- A Neural Algorithm of Artistic Style
- project euler
- mnist
- Today
- Total
목록IT/PROJECT_EULER (60)
통계, IT, AI
문제는 이곳에서 확인할 수 있다. 모든 square root는 주기를 갖는 분수 꼴로 나타낼 수 있다고 한다. 문제의 예시와 같이 square root의 주기를 반환하는 함수를 작성하여 문제를 풀었지만 주석의 why? 부분은 왜 그것이 보장되는지 모르겠다.import mathdef f(k, a, b): ''' b/(sqrt(k) - a) to C + (sqrt(k) - A)/B return A, B, C ''' d = (k - a ** 2)/b assert int(d) == d # why? d = int(d) _a = [_a for _a in range(math.ceil(math.sqrt(k) + a - d), math.floo..
문제는 이곳에서 확인할 수 있다. \(16807=7^5\)이며 5자리 숫자이다. 이와 같이 어떤 수의 길이가 n이면서 n승의 형태로 나타낼 수 있는 양의 정수의 개수를 찾아야 한다. 문제의 조건에서 \(10^n\)은 \(n+1\)자리수가 되어 체크할 필요가 없음을 알 수 있다. import itertools ans = 0 for k in range(1, 10): for n in itertools.count(1): if len(str(k ** n)) == n: ans += 1 elif len(str(k ** n)) < n: break print(ans) 답은 49이다.
문제는 이곳에서 확인할 수 있다. 문제의 조건에서 순열에 속하는 모든 수는 같은 자리의 수임을 알 수 있다. 따라서 n을 1부터 늘려가면서 세제곱을 구해가면서 자리수가 달라질때 체크하면 된다. import collections cubic_nums = collections.defaultdict(list) digit_len, n = 1, 1 target_perm_len = 5 while True: cubic_num = str(n ** 3) _len = len(cubic_num) if _len != digit_len: res = [min(v) for v in cubic_nums.values() if len(v) == target_perm_len] if len(res) > 0: print(min(res)) br..
문제는 이곳에서 확인할 수 있다. 계산을 해보니 4자리의 polygonal number는 각각 100여개가 채 되지 않았다. 또한 3부터 8까지의 숫자를 나열하는 개수도 많지 않다. 이 정도면 brute force로도 해결이 가능할 것 같다. import pandas as pd import itertools import functools def p(k, n): if k == 3: return n*(n+1)//2 if k == 4: return n*n if k == 5: return n*(3*n-1)//2 if k == 6: return n*(2*n-1) if k == 7: return n*(5*n-3)//2 if k == 8: return n*(3*n-2) p_num = dict() for k in ra..
문제는 이곳에서 확인할 수 있다. 어떤 소수 두개를 앞뒤로 합치면 그 수도 소수가 되는 경우가 있다. 예를 들면, 3과 7, 3과 11 등이 있다. 이를 연결되었다고 하자. 3, 7, 109 그리고 673은 두개의 원소를 뽑았을때 모두 연결되며, 원소의 개수가 4개인 집합 중 합이 가장 작다. 개수가 5인 집합 중 합이 가장 작은 것을 찾고 그 합을 구하는 것이 문제이다. 3부터 시작하여 소수 판별을 한 뒤, 새로 찾은 소수가 기존의 소수와 연결되는지 판단한다. 길이가 3인 집합이 만들기 위해서는, 연결되는 두 소수를 고른 뒤 모든 원소가 새로 찾은 소수와 연결되는 지 확인하면 된다. 예를 들어 새로 찾은 소수가 109라고 하자. 기존의 소수로 만들 수 있는 109와 연결된 소수는 {3, 109}, {7..
1. 개요 문제는 이곳에서 확인할 수 있다. 어떤 문서를 암호화하기 위하여 XOR 연산을 사용할 수 있다. 예를 들어 A는 아스키코드로 65인데 42와 XOR 연산을 하여 107로 암호화할 수 있다. 여기서 42는 키의 역할을 하며 107과 42를 XOR 연산을 하면 65로 복호화가 된다. 복호화가 불가능하게 하기 위해서는 암호화하는 문장과 같은 길이의 무작위 키로 암호화하면 된다. 하지만 이 방법은 실용적이지 못하기 때문에 기억하기 적당한 길이의 키를 전체 메시지에 대하여 돌아가며 적용한다. 문제에서 주어진 암호문의 키는 영어 소문자 3개라는 것이 알려져 있다. 그 키로 암호문을 해독하고 아스키코드 값의 합을 구하는 것이 문제의 목표이다. 단, 본래의 메시지는 일반적인 영어 문장이다. 2. 구현 26개..
1. 개요 문제는 이곳에서 확인할 수 있다. 아래와 같이 1부터 자연수를 반시계 방향으로 늘어놓자. 37 36 35 34 33 32 31 38 17 16 15 14 13 30 39 18 5 4 3 12 29 40 19 6 1 2 11 28 41 20 7 8 9 10 27 42 21 22 23 24 25 26 43 44 45 46 47 48 49 흥미롭게도 대각 방향에 있는 수 13개는 1을 제외하고 모두 홀수이다. 또한 그 수들 가운데 8개는 소수이다. 위의 예시에서 그 비율은 \(8/13 \approx 62\%\)이다. 처음으로 그 비율이 10%보다 작아졌을 때 변의 길이를 구하는 것이 문제의 목표이다. 2. 구현 중앙의 1을 \(n=1\)이라고 하면 오른쪽 아래 방향의 수는 모두 \((2n-1)^2\..
1. 개요 문제는 이곳에서 확인할 수 있다. \(\sqrt{2}\)는 다음과 같이 표현할 수 있다. $$\sqrt{2}=1+1/(2+1/(2+1/(2+\cdots)))= 1.414213\cdots $$ 4번째까지의 항을 살펴보면 다음과 같다. \(1 + 1/2 = 3/2 \) \(1 + 1/(2 + 1/2) = 7/5 \) \(1 + 1/(2 + 1/(2 + 1/2)) = 17/12 \) \(1 + 1/(2 + 1/(2 + 1/(2 + 1/2))) = 41/29 \) 8번째 항은 \(1393/985\)이며, 이때 처음으로 분자의 자리수가 분모의 자리수보다 크게 된다. 1,000번째 항 내에서 분자의 자리수가 분모의 자리수보다 큰 항의 수를 구하는 것이 문제의 목표이다. 2. 구현 각 항에서 1을 제외하고..
1. 55번 개요 문제는 이곳에서 확인할 수 있다. 47을 거꾸로 한 뒤 서로 더하면, 47+74=121이 되며 121은 회문자 palindrome이다. 349는 이 과정을 세번을 거치면 7337이 되어 회문자가 된다. 증명된 것은 아니지만, 어떤 숫자들은 거꾸로 한뒤 서로 더하는 과정을 아무리 거쳐도 회문자가 되지 않는다고 추측된다. 이러한 숫자들을 Lychrel 수라고 한다. 10,000보다 작은 Lycherel 수의 개수를 구하는 것이 문제의 목표이다. 단, 50번 안에 회문자가 되지 않으면 그 수는 Lycherel 수라고 가정한다.2. 55번 구현 # -*- coding: utf-8 -*- # Project Euler 55 def reverse_n(n): return int(str(n)[::-1]..
1. 개요 문제는 이곳에서 확인할 수 있다. 포커 게임에서 패의 순서는 다음과 같다. High Card: 모든 값이 다르고 적어도 하나의 모양이 다른 경우One Pair: 두 장이 같은 값을 가지는 경우 Two Pair: 두 개의 One Pair가 나오는 경우 Three of a Kind: 3장이 같은 값을 가지는 경우 Staight: 모든 카드의 값이 연속하는 경우 Flush: 모든 카드가 같은 모양인 경우 Full House: Three of a Kind와 One Pair가 나온 경우 Four of a Kind: 4장이 같은 값을 갖는 경우 Straight Flush: 모든 카드의 값이 연속하며 같은 모양인 경우 Royal Flush: Straight Flush이면서 가장 작은 값이 10인 경우 카드..