代码之家  ›  专栏  ›  技术社区  ›  Jonno_FTW

如何让Haskell根据前面的答案使用另一个列表

  •  0
  • Jonno_FTW  · 技术社区  · 17 年前

    我正在做欧拉项目问题63,在那里我必须找到存在的数字数量,其中:

    x^(n) == y
    

    哪里 n y .

    很快发现,这种情况的结果在奇数和偶数之间交替,所以我在Haskell中提出了这个:

    prob63 = [ n | n <- nums n , i <-[1..10], i^(length $ show n) == n]
    
    nums n | odd (n) == True = filter odd [n..]
        | otherwise         = filter even [n..]
    

    如果n<;-[1..],prob63生成如下流:

    [1,2,3,4,5,6,7,8,9,16,25,36,49,64,81,125,216,343,512,729,1296,2401,4096,6561,16807,32768,59049,117649,262144,531441]
    

    但这很慢,我之后想出的方法也不起作用。我需要的是,根据之前的答案,它将开始测试以下的奇数或偶数 n 。我该如何从已有的基础上着手呢?

    1 回复  |  直到 11 年前
        1
  •  2
  •   Stephan202 Alex Martelli    17 年前

    在奇数和偶数之间交替!

    1,2,3,4,5,6,7,8,9,16,25,36,49,64,81,125,216,343,512,729,1296,2401,4096,6561,16807,32768,59049,117649,262144,531441]

    prob63 :: [Integer]
    prob63 = test 1
      where
        test s = next : test (next + 1)
          where
            next = head [n | n <- [s,s+2..], i <-[1..10], i^(length $ show n) == n]
    
    推荐文章