일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- c#
- bayesian
- neural network
- 수달
- 냥코 센세
- Autoencoder
- 비샤몬당
- 역전파
- 신경망
- CNN
- 딥러닝
- 히토요시
- deep learning
- 오토인코더
- 전처리
- 소수
- project euler
- backpropagation
- 베이지안
- 오일러 프로젝트
- 역전파법
- mnist
- Convolutional Neural Network
- Gram matrix
- 자전거 여행
- SQL
- Python
- 소인수분해
- A Neural Algorithm of Artistic Style
- 합성곱 신경망
- Today
- Total
목록오일러 프로젝트 (52)
통계, IT, AI
1. 개요문제는 이곳에서 확인할 수 있다. 어떤 정수 \(a\), \(b\)가 주어졌을 때, Quadratic form \(n^2+an+b\)는 \(n=0\)부터 시작하여 소수를 연속적으로 생성한다. 예를 들어 \(n^2+n+41\)은 40개의 소수를, \(n^2-79n+1601\)은 80개의 소수를 생성한다. 소수를 연속적으로 가장 많이 생성하는 \(a\)와 \(b\)를 찾고 그 곱을 구하는 것이 목표이다. 단, \(a\), \(b\)를 \(\left| a\right| lim: break self.prime_list.extend(prime_candidate_list) def quadratic_formula(n, a, b): """소수를 생성하는 식""" return n**2 + a*n + b p = P..
1. 개요문제는 이곳에서 확인할 수 있다. 1보다 크고 1000보다 작은 어떤 자연수 \(d\)로 순환소수 \(1/d\)를 만들 수 있다. 예를 들어 \(1/6=0.1(6)\)이며 \(1/7=0.(142857)\)이다. 순환되는 부분이 가장 긴 \(d\)를 찾는 것이 목표이다. 2. 구현: ver 1.0나눗셈을 수행하면서 순환되는 부분이 어디에서 발생하는지 확인한다. # -*- coding: utf-8 -*- def count_reciprocal_cycles(d): """나눗셈을 수행하면서 나머지가 0이면 순환되는 부분이 없으므로 0을 반환한다. 나머지가 이미 발생한 나머지라면 순환이 시작되는 부분이므로 이 부분을 찾는다.""" quotient_list, remainder_list = [], [] n =..
1. 개요문제는 이곳에서 확인할 수 있다. \(n\)번째 피보나치 수열의 값을 \(F_n\)이라고 할 때 최초로 1000의 자리를 넘는 \(F_n\)의 \(n\)을 구하는 것이 목표이다. 단, \(F_1=F_2=1\)이다. 2. 구현: ver 1.0처음에는 피보나치 수열의 일반항을 구하여 진행하려고 했으나 일반항에 무리수가 포함되어 있고 거듭제곱 연산이 발생하기 때문에 계산상 오차가 발생하였다. 피보나치 수열의 일반항은 3. 피보나치 수열의 일반항에 적고, 본 문제의 해결은 피보나치 수열의 정의를 이용한다. # -*- coding: utf-8 -*- import math as m fn_2, fn_1 = 1, 1 fn = fn_2 + fn_1 n = 3 while m.log(fn, 10) < 999: # ..
1. 개요 문제는 이곳에서 확인할 수 있다. 숫자 0, 1 그리고 2가 주어졌다고 하자. 이 숫자들로 만들 수 있는 순열을 크기 순으로 나열하면 012, 021, 102, 120, 201 그리고 210이다. 이때 이 순열의 3번째 값은 102이다. 이와 같은 방식으로 0부터 9까지의 숫자가 주어졌을 때 100만번째 값을 구하는 것이 목표이다. 2. 구현: ver 1.0 0, 1, 2가 주어지고 5번째 값을 구한다고 하자. 가장 앞에 오는 수는 2이다. 왜냐하면 0과 1이 가장 앞에 올때 순열의 가짓수는 각각 2이기 때문이다. 이후 남은 5-2-2=1번째 순열을 구하면 되므로 남은 0과 1이 선택된다. 이와 같은 방식을 구현한다. # -*- coding: utf-8 -*- import math as m d..
1. 개요 문제는 이곳에서 확인할 수 있다. 어떤 자연수 \(n\)이 있을 때, \(n\)을 제외하고 \(n\)을 나누어 떨어지게 하는 수들을 proper divisors라고 하자. proper divisors의 합이 \(n\)과 같을 때 \(n\)을 perfect number라고 한다. 그리고 proper divisors의 합이 \(n\)보다 작을 때 \(n\)을 deficient number, 클 때 abundant number라고 한다. 예를 들면, 28의 proper divisors는 1, 2, 4, 7, 14이며 그 합은 28이므로 28은 perfect number이다. 12의 proper divisors는 1, 2, 3, 4, 6이며 그 합은 16이므로 가장 작은 abundant number이..
1. 개요 문제는 이곳에서 확인할 수 있다. 자연수 \(n\)보다 작으면서 \(n\)을 나누어 떨어지게 하는 수를 proper divisor라고 하자. 그리고 \(d(n)\)을 \(n\)에 관한 proper divisors의 합이라고 정의하자. 이때 서로 다른 \(a\)와 \(b\)에 대하여 \(d(a)=b\), \(d(b)=a\)의 관계가 있을 때 \(a\)와 \(b\)를 amicable numbers라고 한다. 예를 들어, \(d(220)=284\), \(d(284)=220\)이므로 220과 284는 amicable numbers이다. 10000보다 작은 amicable numbers의 합을 구하는 것이 문제의 목표이다. 2. Ver 1.0\(d(n)\)을 정의할 때, 처음에는 소수를 사용하는 방법을..
1. 개요 풀이가 워낙 간단하여 19, 20번 두 문제를 푼다. 각각의 문제는 이곳과 이곳에서 확인할 수 있다. 19번 문제의 목표는 1901년 1월 1일부터 2000년 12월 31일에서 각 월의 1일이 일요일인 날의 수를 세는 것이다. 20번 문제는 \(100!\)의 각 자리의 수를 더하는 것이다. 2. Ver 1.0 # -*- coding: utf-8 -*- import datetime, math # 19. Counting Sundays print(sum(1 for y in range(1901, 2001) for m in range(1, 13) if datetime.date(y, m, 1).weekday() == 6 )) # 20. Factorial digit sum print(sum(int(i) f..
1. 개요 문제는 이곳에서 확인할 수 있다. 숫자를 삼각형으로 쌓아놓고 위 층으로부터 한가지 길을 선택해 내려가면서 누적합을 구하되 가장 큰 값을 구하는 것이 목표이다. 단, 길 선택은 두 갈래 중의 하나만 가능하다. 예를 들면, 아래의 숫자 더미에서 최대값은 3 + 7 + 4 + 9 = 23이다. 2. Ver 2.0모든 경우의 수를 찾는 것은 간단한 방법이지만 숫자더미가 커질수록 비효율적인 방법이다. 층수가 충분히 많으면 내가 눈을 감을 때까지도 답을 찾지 못할 수도 있다. 그래서 1주일 가량 다른 방법을 생각해봤지만 결국 답을 찾지 못하고 구글링을 하였다. 방법은 생각보다 훨씬 간단했다. 요는 위에서부터 내려가는 것이 아니라, 밑에서부터 올라가면서 최대값을 찾는 것 이었다. 즉, \(l\)번째 층의 ..
1. 개요 문제는 이곳에서 확인할 수 있다. 1부터 1000까지 영어로 세고 각 알파벳의 수를 더하면 된다. 몇가지 예외만 고려하면 쉽게 해결할 수 있다. 2. Ver 1.0 # -*- coding: utf-8 -*- data = dict() data[0] = "" data[1] = "ONE" data[2] = "TWO" data[3] = "THREE" data[4] = "FOUR" data[5] = "FIVE" data[6] = "SIX" data[7] = "SEVEN" data[8] = "EIGHT" data[9] = "NINE" data[10] = "TEN" data[11] = "ELEVEN" data[12] = "TWELVE" data[13] = "THIRTEEN" data[14] = "FOURT..
1. 개요 워낙 풀이가 간단하여 두개의 문제의 한개의 포스팅에 올린다. 15번 문제는 이곳에서 확인할 수 있고, 16번 문제는 이곳에서 확인할 수 있다. 15번 문제는 격자무늬에서 찾을 수 있는 길을 찾는 것이 목표인데, 조합을 이용하면 쉽게 해결할 수 있다. 즉, \({}_{40} \mathrm{ C }_{20}\)을 계산하면 된다.16번 문제는 2의 1000승을 구한 후 각 자리의 숫자를 더하면 된다. 2. Ver 1.0 파이선을 사용하여 쉽게 답을 구하자. # -*- coding: utf-8 -*- import math as m # 15. Lattice paths f = m.factorial print(f(40)/(f(20)**2)) # 16. Power digit sum print(sum([int..