プロジェクトオイラー問27

http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2027
Problem 27 「二次式素数」 †
素数をn=0から連続する整数でn^2+an+bで生成した時、最も長く生成できるa,bの組を答えよ
枝刈りして全探索です。



not_prime(N):-N<2,!.
not_prime(N):-
	between(2,N,P),
	(P*P > N -> !,fail;N mod P=:=0,!).

is_prime(N):-not(not_prime(N)).

calc(A,B,N,N):-
	C is N^2+A*N+B,
 	not_prime(C),
	!.
calc(A,B,N,Result):-
 	N1 is N+1,
	calc(A,B,N1,Result).

search([Len,N]):-
 	between(3,999,B),
	is_prime(B),
	between(-499,500,A0),
	A is A0*2-1,
	N is A*B,
	calc(A,B,1,Len).
main:-
	findall(E,search(E),Es),
	sort(Es,Es1),
 	reverse(Es1,[Top|_]),
	write(Top).
最終更新:2014年12月01日 07:25