코딩 연습

프로젝트 오일러 135번 본문

project euler with python

프로젝트 오일러 135번

코딩아저씨 2016. 3. 15. 16:05
반응형

Given the positive integers x,y, and z, are consecutive terms of an arithmetic progression, the least value of the positive integers n, for which the equation, x2y2z2=n, has exactly two solutions is n=27:342272202=1229262=27 It turns out that n=1155 is the least value which has exactly ten solutions.

How many values of n less than one million have exactly ten distinct solutions?




자연수 x,y,z 가 등차수열을 이룰 때, 방정식 x2y2z2=n2 개의 해를 갖기 위한 최소의 자연수 n27 이다. 342272202=1229262=27 또한 n=1155 은 방정식이 10개의 해를 갖기 위한 자연수 n의 최솟값이다.

n<106 에서 위 방정식이 10 개의 해를 갖는 n 은 몇 개 있을까?


'등차수열을 이루는 세 수' 라는 문구가 문제가 등장하면 세 수를 ad,a,a+d  (단, a,d 는 정수 a>d)로 두고 문제를 풀라는 얘기를 고등학교 수학 시간에 귀에 못이 박히게 들었을 것이다. 여기서도 예외는 없다.

     (a+d)2a2(ad)2=n

     4ada2=n

     a(4da)=n

이때 d 가 정수이므로 4da=b 라고 하면 d=a+b4 에서 a+b4 의 배수가 되어야 한다. 또한 ad=aa+b4>0 이어야 하므로 3a>b 이어야 한다.

이 두 가지 조건을 만족시키는 a,b 의 순서쌍을 찾으면 된다.

파이썬을 이용한 코드를 보면 다음과 같다. 

 

result = [0] * (10 ** 6)

for a in range(1, 10 ** 6):
    b = 4 - (a % 4)
    while a * b < 10 ** 6:
        if 3 * a > b:
            result[a * b] += 1
        b += 4

print(result.count(10))

먼저 길이가 100000+1 인 리스트 result를 만들어 모든 성분을 0 으로 한다. a1 부터 1000000 까지 변화시키고, b 의 초기값을 a+b4 의 배수가 되는 최소의 자연수로 결정한다. 그리고 b4 씩 증가시면서 계속 a+b4 의 배수가 되도록 한다. bab<106 범위에서만 생각하면 된다. 이런 중에 3a>b 인 조건을 만족시킨다면 result[ab] 요소를 1 씩 증가시킨다. 

마지막에 result 의 요소 중 그 값이 10인 것들만 카운트하면 답을 구해낼 수 있다.




반응형

'project euler with python' 카테고리의 다른 글

프로젝트 오일러 137번  (0) 2016.03.15
프로젝트 오일러 136번  (0) 2016.03.15
프로젝트 오일러 134번  (0) 2016.03.15
프로젝트 오일러 133번  (0) 2016.03.15
프로젝트 오일러 132번  (0) 2016.03.15


Comments