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

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

10001 番目の素数を求めよ.

Haskell解
f::Int
f =last $ take 10001 [x|x<-[2..],isPrime x]


isPrime :: Int -> Bool
isPrime 2 = True
isPrime n
   | n < 2            = False
   | (n `mod` 2) == 0 = False
   | otherwise        = wari 3 n

wari :: Int -> Int -> Bool
wari i n = if i * i <= n
           then (if n `mod` i == 0
                   then False
                   else wari (i + 2) n)
           else True


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)).

search(N,10001):-
	!,
	N1 is N-2,
	write(N1),nl.
search(N,C):-
	is_prime(N),
	!,
	N1 is N+2,
 	C1 is C+1,
	search(N1,C1).
search(N,C):-
	!,
	N1 is N+2,
	search(N1,C).

main:-
	search(3,1).
最終更新:2018年04月18日 15:37