본문 바로가기

카테고리 없음

오일러 프로젝트 27 (Julia)

어떤 2차식이 있을 때, 이 이차식에 정수값을 대입했을 때 그 결과가 소수가 된다면, 소수의 개수가 가장 많은 2차식을 구하는 문제이다. 2차식의 그래프는 포물선이며, 포물선은 좌우 대칭이다. 포물선의 식을 (n - v)^2 + w 의 모양으로 정리했을 때, n = v 를 중심으로 소수가 분포하도록 하고 n = 0 ~ v 까지 최대한 소수가 되는 것이 유리하다. 따라서 n^2 an + b 에서 a는 음수 b는 -2a보다 큰 양수가 되는 제약 조건을 걸면 오래 걸리지 않는다.

a, b가 주어질 때,0부터 몇 개의 소수가 나오는지를 체크한다.

using Primes

function test(a, b)
	f(x) = x^2 + a*x + b
	c, i = 0, 0
	while true
		isprime(f(i)) || break
		c, i = c + 1, i + 1
	end
	return i - 1
end

function main()
	[(test(a, b), a * b) for a=-1000:-1 for b=-2x:1000] |> maximum |> last |> println
end