Comment detail

Meertens数 (Nested Flatten)
ghcでコンパイルすると
桁数 : 時間
10 :   0.6s
11 :   1.9s
12 :   6.1s
13 :  18.0s
14 :  52.4s
15 : 150.1s
1桁増えるごとに約3倍 20桁なら10時間かな?

Meertens数は81312000しか知られていないらしいです。
他にあるかどうかも未知らしい。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
module Main (main) where

import Data.Tree
import System.Environment

primes :: [Integer]
primes = sieve [2..] where sieve (p:xs) = p:sieve [x | x <- xs, x `mod` p /= 0]

type Label = (Integer, Integer)

powers :: Integer -> [Integer]
powers = flip iterate 1 . (*)

mktree :: Int -> Label -> [[Integer]] -> Tree Label
mktree k l pss = unfoldTree phi (l,pss)
  where phi (x,[])     = (x,[])
        phi (x,ps:pps) = (x,zip (labels x ps) (repeat pps))
        labels (n,g) ps = zip (map (10*n +) [0..9]) (takeWhile (10^k >) (map (g*) ps))

gtree :: Int -> Tree Label
gtree k = snip $ mktree k (0,1) $ map powers $ take k primes
 where snip (Node x ts) = Node x (tail ts)

meertens :: Int -> [Integer]
meertens k = [ n | (n,g) <- flatten $ gtree k, n == g ]

main :: IO ()
main = putStr . unlines . map show . meertens . read . head =<< getArgs

Index

Feed

Other

Link

Pathtraq

loading...