일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 전처리
- deep learning
- neural network
- bayesian
- CNN
- backpropagation
- SQL
- 냥코 센세
- 합성곱 신경망
- 수달
- 비샤몬당
- Python
- Autoencoder
- Gram matrix
- Convolutional Neural Network
- 자전거 여행
- 신경망
- 베이지안
- 오일러 프로젝트
- 히토요시
- 소수
- c#
- 오토인코더
- 딥러닝
- A Neural Algorithm of Artistic Style
- 소인수분해
- 역전파법
- project euler
- 역전파
- mnist
- Today
- Total
목록IT/PROJECT_EULER (60)
통계, IT, AI
1. 개요 문제는 이곳에서 확인할 수 있다. 합이 1000인 서로 다른 3개의 자연수 가운데, 가장 큰 수의 제곱이 나머지 두 수의 제곱의 합과 같은 자연수를 찾고 그것의 곱을 구하는 것이 목표이다. 2. Ver 1.0 가장 작은 자연수를 \(a\)라고 하자. \(a\)는 1이상, 332이하이다. 332보다 크다면 문제의 조건을 충족시킬 수 없기 때문이다. 같은 이유에서 두번째로 큰 자연수 \(b\)는 \(a+1\)이상, \((1000-a)/2-1\)이하이다. 이 조건을 이용하여 코딩한다. using System; class ProjectEuler { static void Main(string[] args) { for(int a=1; a
1. 개요 문제는 이곳에서 확인할 수 있다. 어떤 숫자 더미에서 인접한 13개의 숫자들의 곱의 최대값을 찾는 것이 목적이다. 2. Ver 1.0 여려운 문제는 아니었지만 생각보다 시간이 오래 걸렸다. 로직은 옳은 것 같은데 계속 답이 틀렸기 때문이다. 알고보니 인접한 숫자들을 곱할 때 그 결과를 int로 지정한 것이 잘못이었다. 그 곱이 int가 처리할 수 있는 범위를 넘어섰기 때문이다. 정수라고 하면 흔히 int로 선언하곤 했고 여기서 문제가 생긴 적이 없어서 쉽게 발견하지 못했다. int 대신 ulong을 사용하여 문제를 해결하였다. using System; using System.Text.RegularExpressions; using System.Linq; class ProjectEuler { st..
1. 개요 문제는 이곳에서 확인할 수 있다. 10,001번째 소수를 구하는 것이 문제의 목적이다. 2. Ver 1.0 어떤 수가 소수인지 판별하는 문제에 대해서는 예전에도 포스트한 적이 있다. 본 문제를 해결하는데에도 유사한 방법을 사용할 것이다. // javascript var prime = [2,3]; var prime_candidate = prime[prime.length-1]; while( prime.length < 10001 ){ prime_candidate += 2; var is_prime = ( function(){ var lim = Math.sqrt( prime_candidate ); for( p in prime ){ if( lim < p ) break; if( prime_candidate..
1. 개요 문제는 이곳에서 확인할 수 있다. 1부터 100까지 합의 제곱과 1부터 100까지 제곱의 합과의 차를 구하는 문제이다. 2. Ver 1.0 1부터 \(k\)까지 자연수의 합의 제곱과 제곱의 합의 차이는 다음과 같은 간단한 공식으로 구할 수 있다. $$ \left(\sum_{i=1}^{k}i\right)^2 - \sum_{i=1}^{k}i^2 = \left\{\frac{k(k+1)}{2}\right\}^2 - \frac{k(k+1)(2k+1)}{6}$$ // 자바스크립트로 구현한다. var pow = Math.pow; var k = 100; var front_part = pow( k, 2 ) * pow( k+1, 2 )/4 var rear_part = k * ( k+1 ) *(2*k+1)/6 a..
1. 개요 문제는 이곳에서 확인할 수 있다. 1부터 20까지의 최소공배수(Least Common Multiple, LCM)를 구하는 것이 목적이다. 2. Ver 1.0 먼저 1과 2의 LCM을 구한다. 그 LCM과 3과의 LCM을 구한다. 이를 20까지 반복한다. 두 수의 LCM을 구하기 위해서는 먼저 두 수를 소인수분해 해야 한다. 그리고 공통인수는 거듭제곱이 더 큰 것을 곱하고, 공통인수가 아닌 것은 모두 곱하면 된다. 예를 들어, \(20=2^2 5^1, 24=2^3 3^1\)이므로 20과 24의 최소공배수는 \( 2^3 3^1 5^1 = 120\)이다. # -*- coding: utf-8 -*- # ver 1.0 import numpy as np import utils as u import fun..
문제는 이곳에서 확인할 수 있다. 어떤 세자리수를 곱하여 만들 수 있는 가장 큰 palindromic number를 찾자. 이때 palindrome은 앞으로 읽으나 뒤로 읽으나 같은 문자열을 가르킨다. # -*- coding: utf-8 -*- # ver 1.0 palindrome = [ x*y for x in range( 999, 99, -1 ) for y in range( x, 99, -1 ) if str(x*y) == str(x*y)[::-1] ] print max( palindrome ) 사람들의 코드를 보니 더 나은 아이디어가 있어 이를 소개한다. 6자리의 palindrome \( n\)은 아래와 같이 표현된다. \(n = 100000x + 10000y + 1000z + 100z + 10y + ..
문제는 이곳에서 확인할 수 있다. 600851475143의 가장 큰 소인수를 찾는 문제인데, 이를 해결하기 위해서는 어떤 수가 소수인지 먼저 파악해야 한다. 이를 위하여 소수 판별에 관한 내용을 따로 포스트하였다. 600851475143를 소수로 계속 나누되 1을 만드는 소수를 찾으면 된다. # -*- coding: utf-8 -*- import numpy as np import utils as u # class Prime p = u.Prime() n = 600851475143 # n is not divisible by 2 prime_candidate = 3 find_prime = True while True: while not p.is_prime( prime_candidate ): prime_candi..
문제에 대한 설명은 이곳에서 확인할 수 있다. 먼저 직관적으로 떠오르는 방식으로 구현하고 이를 ver 1.0이라고 하자. # ver 1.0 a_n2 = 1 a_n1 = 2 answer = a_n1 # since 2 is even while True: a_n = a_n1 + a_n2 if a_n > 4000000: break if a_n % 2 == 0 : answer += a_n a_n1, a_n2 = a_n, a_n1 print answer 문제를 풀고 사람들의 풀이를 보니 더 나은 방법이 있다는 것을 알게 되었다. 이를 소개한다. 먼저 수열의 시작을 1, 1로 바꾸자. 이렇게 바꾸면 매 3번째 수가 짝수가 되어 계산을 줄일 수 있다. 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89,..
문제에 대한 설명은 이곳에서 확인하자. 이 문제는 굳이 코딩을 거치지 않아도 풀 수 있는 것 처럼 보인다. 그래도 project Euler의 취지에 맞도록 코딩을 하여 문제를 풀어보자. 파이썬 코드는 다음과 같다. answer = sum( [ i for i in range(1,1000) if i % 3 ==0 or i % 5 ==0 ] ) print answer scala 코드는 다음과 같다. object HelloWorld extends App { val x = List.range(1, 1000).filter(x => x % 3 == 0 || x % 5 == 0).sum println(x) } 답은 233168 이다.