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