「プロジェクトオイラー問3」の編集履歴(バックアップ)一覧はこちら
「プロジェクトオイラー問3」(2018/04/18 (水) 05:41:29) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%203
Problem 3 「最大の素因数」 †
13195 の素因数は 5, 7, 13, 29 である.
600851475143 の素因数のうち最大のものを求めよ.
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).
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).