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

http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2059
Problem 58 「螺旋素数」 †
格子にらせん状に数字をつけていくとき、対角線上の素数の割合が10%未満になるときの螺旋のサイズを答えよ。
地道に計算する程度しか思いつきません。


not_prime(N):-N<2.
not_prime(N):-
	between(2,N,D),
	(D^2>N->!,fail;true),
	N mod D=:=0,
	!.
is_prime(N):-not(not_prime(N)).

calc(Size,P,Count):-
	P>0,
	P*10<Count,!,
	Ans is Size-2,
	write(Ans).
calc(Size,P,Count):-
	A1 is Size*Size,
	A2 is A1-Size+1,
	A3 is A2-Size+1,
	A4 is A3-Size+1,
	findall(E,(member(E,[A1,A2,A3,A4]),is_prime(E)),Es),
	length(Es,Add),
	Count1 is Count+4,
	P1 is P+Add,
	Size1 is Size+2,
	calc(Size1,P1,Count1).
main:-
	calc(3,0,1).
最終更新:2014年12月08日 20:17