2014年3月10日月曜日

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

Problem 7 「10001番目の素数」 

素数を小さい方から6つ並べると 2, 3, 5, 7, 11, 13 であり, 6番目の素数は 13 である.
10 001 番目の素数を求めよ.
http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%207


解法
Prolog言語


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

prime_count(N,Count,N1,Count1):-
is_prime(N),
!,
N1 is N+1+(N mod 2),
Count1 is Count+1.
prime_count(N,Count,N1,Count):-
N1 is N+1+(N mod 2).

search(N,10001):-!,
N1 is N-2,
write(N1).
search(N,Count):-
!,
prime_count(N,Count,N1,Count1),
search(N1,Count1).


main7:-
search(2,0).

0 件のコメント:

コメントを投稿