==0は式の一部でなく関数だというのではまりました。
x `mod` 7 == 0
と書きたくなるのが罠。
Haskell解
import System.IO
main = do
putStrLn $ show test
test::Int
test=maximum $ filter ((==0) . ( 600851475143 `mod`)) $ fmap fst $ takeWhile ((<=600851475143)
.snd) [(a,a*a)|a<-[2..], isPrime a]
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解
divs(N,Div,N):-
(N mod Div)>0,
!.
divs(N ,Div,Result):-
N1 is N//Div,
divs(N1,Div,Result).
search(1,Div):-
!,
Div1 is Div-1,
write(Div1).
search(N,Div):-
N=<Div*Div,
!,
write(N).
search(N,Div):-
divs(N,Div,N1),
Div1 is Div+1,
search(N1,Div1).
main:-search(600851475143,2).
最終更新:2018年04月18日 05:41