project euler 37

오일러 프로젝트 37 번 소수 3797에는 왼쪽부터 자리수를 하나씩 없애거나 (3797, 797, 97, 7) 오른쪽부터 없애도 (3797, 379, 37, 3) 모두 소수가 되는 성질이 있습니다. 이런 성질을 가진 소수는 단 11개만이 존재합니다. 이것을 모두 찾아서 합을 구하세요. (참고: 2, 3, 5, 7은 제외합니다) http://euler.synap.co.kr/prob_detail.php?id=37 조건에 맞는 소수들을 세면서 11개가 될때까지 검사를 수행해야 한다. 왼쪽에서 한자리씩 없애거나 오른쪽에서 한자리씩 없애는 것은 간단한 편인데 (상용로그를 이용하면 쉽다) 시간이 적지 않게 소모된다. 성능을 최적화하는 방법 몇 가지를 살펴보자. 숫자를 하나씩 제거해나가면 원래 값보다

project euler 35

오일러 프로젝트 35 번 소수 중에서 각 자리의 숫자들을 순환시켜도 여전히 소수인 것을 circular prime이라고 합니다. 예를 들어 197은 971, 719가 모두 소수이므로 여기에 해당합니다. 이런 소수는 100 밑으로 2, 3, 5, 7, 11, 13, 17, 31, 37, 71, 73, 79, 97 처럼 13개가 있습니다. 그러면 1,000,000 밑으로는 모두 몇 개나 있을까요? http://euler.synap.co.kr/prob_detail.php?id=35 순환하는 수를 만드는 건 쉽다. 자리수에 해당하는 10의 제곱수로 나눈 몫과 나머지를 가지고 나머지*10 + 몫으로 순환시킨다. 검사를 빠르게 하기 위해 소수채를 만들고 여기에 있나 없나를 검사한다.

편집거리 (단어의 유사도 분석)

편집거리 구하기 computer라는 단어와 commuter라는 단어는 매우 유사한데, p -> m으로 한글자만 변경하면 처음 단어에서 두 번째 단어로 바뀌게 된다. 비슷하게 sport라는 단어는 sort라는 단어로 바꾸기 위해서는 p 한글자를 지우면 된다. 혹은 sort에서 p한 글자를 추가하면 된다. 편집거리는 두 문자열 s1, s2에서 몇 번의 추가/삭제/변경으로 변환할 수 있는가를 나타내는 개념이다. 이러한 변경에는 글자를 교환하기 글자를 삽입하기 글자를 삭제하기 의 세 종류의 변경 연산을 할 수 있다. 이를 이용해서 두 단어 사이의 편집거리를 구하는 재귀 함수를 생각해보자. d(”, ”) = 0

Project Euler 34

오일러 프로젝트 34 번 숫자 145에는 신기한 성질이 있습니다. 각 자릿수의 팩토리얼(계승)을 더하면 1! + 4! + 5! = 1 + 24 + 120 = 145 처럼 자기 자신이 됩니다. 이렇게 각 자릿수의 팩토리얼을 더하면 자기 자신이 되는 모든 수의 합을 구하세요. 단, 1! = 1 과 2! = 2 의 경우는 덧셈이 아니므로 제외합니다. http://euler.synap.co.kr/prob_detail.php?id=34 9!이 362880이므로 6자리수에서는 최대 7자리 값이 나올 수 있고, 7자리 값은 항상 7자리이다. 그 중 최대는 2540160이 되므로 의 범위 내에서 찾으면 된다. (사실상

파이썬 커맨드라인 실행방법

Windows7 명령줄도구에서 파이썬 스크립트 실행하기 기본적으로 파이썬을 설치하면 PATH 환경변수에 파이썬의 설치 경로가 추가된다. 이를 확인해보려면 명령프롬프트를 열고 path라고 입력한다음 엔터. d:\temp>path PATH=…….;C:\python34\;C:\python34\scripts\;…….. 여기서 C:\python34눈 파이썬 인터프리터인 python.exe가 설치되어 있는 곳이고, C:\Python34\Scripts는 그외 파이썬의 부가패키지의 실행파일들이 설치된다. 다른 패키지를 내려받고 설치하도록 도와주는 pip같은 것들이 여기에 설치된다고 보면 된다. 윈도 환경변수 PATH는 실행파일이 있는 위치를 지정하여, 실행파일의 전체 경로를 적지 않고도 해당 파일이 실행될 수 있도록 한다. 파이썬의 설치경로가 PATH에 포함되어 있다면 명령줄 도구에서 파이썬 스크립트를 다음과 같이 실행할 수 있다.

zmq poller

멀티프로세스와 프로세스간 통신 멀티프로세스에서 프로세스간 통신을 파이프로 하는 경우도 있지만, zmq를 이용하면 3개 이상의 멀티스레드가 쉽고 자유롭게 메시지를 주고 받는 것이 가능하다. 하나의 프로그램 내에서 분산처리를 위해서는 멀티프로세싱과 ZMQ를 이용하여 프로세스간 통신을 가능하게 할 수 있다. 간단한 예를 만들어보자. 서브 프로세스에서 n 개의 서버와 1개의 클라이언트를 만들고 로드밸런싱 형태로 각각의 서버가 클라이언트와 번갈아가며 통신하는 코드이다. import zmq import time import random from multiprocessing import Process def server(port=”5566″): “”” request/reply server process “”” ctx = zmq.Context() sock = ctx.socket(zmq.REP) print(“Running server