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

http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%203
Problem 3 「最大の素因数」 †
13195 の素因数は 5, 7, 13, 29 である.
600851475143 の素因数のうち最大のものを求めよ.


==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