프로젝트 오일러 74

자릿수의 계승값을 더해갈 때, 반복이 일어나기 전의 단계가 60번인 경우 찾기
문제 자세히 보기: [국어] [영어]

각 자릿수의 계승값을 더하는 함수는 다음과 같이 간단히 작성할 수 있다.

(defn- fact-sum [n]
(->> (digits n)
(map factorial)
(apply +)))

Read More...

영국에서의 인터넷 뱅킹

한국의 인터넷 뱅킹이 개떡 같은 것은 더 말할 필요도 없다. 영국에서는 별도 보안 프로그램 설치 없이 인터넷 브라우저만으로 쾌적하게 은행 업무를 볼 수 있다. 아마 한국을 제외한 다른 나라도 마찬가지일 것 같다. 영국 은행에서 보안 프로그램 없이 어떻게 안전한 뱅킹 서비스를 제공하는지 살펴보자. 영국의 모든 은행에 계좌를 만들어 인터넷 뱅킹을 해본 것은 아니고, 내 주 거래 은행의 인터넷 뱅킹 경험을 바탕으로 설명하는 것임에 유의하기 바란다.

Read More...

가장 뿌듯했던 순간

그 여정이 바로 보상이다.
- 스티브 잡스

초등학교 때 사촌 동생 집에서 Apple II 컴퓨터를 처음 본 순간 컴퓨터 세계로 빠져들었다. 그러나 사촌 동생 집은 멀어서 매일 갈 수가 없었다. 다행히 친한 친구 집에서 SPC1000 이란 컴퓨터가 있었다. 나는 매일 친구 집에 놀러가서 친구와 함께 컴퓨터를 가지고 놀았다. 친구가 귀찮에 생각했을 지도 모르겠다. 나중에 나도 부모님을 졸라 컴퓨터를 장만했다.

Read More...

프로젝트 오일러 73

분모가 12,000 이하일 때 1/3과 1/2 사이에 위치한 기약 진분수의 개수
문제 자세히 보기: [국어] [영어]

무차별 대입법

분모가 12,000 이하인 경우만 조사하면 되므로 분자와 분모에 12,000 이하의 수를 대입해가며 분수를 만들어 1/3과 1/2 사이의 기약 진부수를 세는 방법으로 답을 구할 수 있을 것 같다. 분모는 3부터 12,000까지, 분자는 분모/3 ~ 분모/2 사이의 정수를 대입해보면 된다.

Read More...

프로젝트 오일러 72

분모가 1백만 이하인 기약 진분수의 개수
문제 자세히 보기: [국어] [영어]

분모가 $d$인 경우 기약 진분수의 개수는 $d$와 서로 소인 정수의 개수와 같다. 이는 Euler’s totient function의 정의와 동일하다. 따라서 분모가 1백만 이하인 기약 진분수의 개수를 $S$라 하면 $S$는 다음과 같이 구할 수 있다.

Read More...

프로젝트 오일러 71

기약 진분수를 커지는 순으로 늘어놓기
문제 자세히 보기: [국어] [영어]

분모가 $n$보다 작거나 같은 0과 1 사이의 기약 진분수의 수열을 Farey sequence라 한다. 이 수열에서 $\frac{a}{b}$와 $\frac{c}{d}$가 이웃이고 $\frac{a}{b} < \frac{c}{d}$면, 두 수의 차는 $\frac{a}{b} - \frac{c}{d} = \frac{1}{bd}$가 되어야 한다.

Read More...

Java에서 배열 합치기

옆 자리 동료가 Java에서 배열을 합치는 간단한 방법이 있는지 질문했다. 열 개 정도의 배열을 하나로 합치고 싶다는 것이었다. 당장 떠오른 방법은 System.arraycopy를 사용하는 것이었지만 이걸 몰라서 물어보지는 않았을 것이다. System.arraycopy를 사용하면 효율적이긴 하겠지만 코드는 별로 예쁘지 않을 것이다. 혹시 이미 이 기능을 구현한 라이브러리가 있나 확인했지만 찾을 수 없었다.

Read More...

나의 글쓰기 도구 변천사

그간 생각을 정리하려고 꾸준히 노력했다. 갑자기 떠오른 아이디어, 새롭게 배운 지식, 책에서 본 마음에 드는 구절, 이것 저것에 대한 잡생각 등 마음만 먹으면 쓸 거리는 넘쳐난다. 자발적으로 작성하는 문서는 모두 미래의 나를 위한 것이다. 개인적으로 보관하는 것이든 블로그에 공개하는 것이든 다른 사람에게 보여주기 보다는 내가 잊지 않으려고 정리하는 것이다. 그동안 글을 쓰는 데 여러 도구를 사용했다. 어떤 도구를 거쳐 지금에 이르렀는지 정리하는 것도 재미있을 것 같다.

Read More...

프로젝트 오일러 70

φ(n)이 n의 순열이 되는 수 조사하기
문제 자세히 보기: [국어] [영어]

$\phi(n)$이 $n$의 순열이 되는 수 중에서 $n/\phi(n)$이 최소가 되는 $n$을 구해야 한다. $n/\phi(n)$이 다음과 같이 표현될 수 있음을 문제 69에서 확인했다.

$$\begin{aligned} \frac{n}{\phi(n)} = \frac{1}{\prod_{p|n}\left(1-\frac{1}{p}\right)} \end{aligned}$$

Read More...

프로젝트 오일러 69

n/φ(n)이 최대가 되는 1백만 이하의 n 찾기
문제 자세히 보기: [국어] [영어]

Euler’s totient function을 보면 $\phi(n)$의 공식을 확인할 수 있다. $\phi(n)$을 구하려면 $n$의 모든 소수 약수를 하나씩 넣어가며 곱을 수행해야 한다.

$$\require{cancel} \begin{aligned} \phi(n) = n \prod_{p|n}\left(1-\frac{1}{p}\right) \end{aligned}$$

Read More...