我在做项目问题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&lt; - [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
的奇数或偶数整数。我将如何从已有的东西中解脱出来?
答案 0 :(得分:2)
再看一下输出。元素不在奇数和偶数之间交替!
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]