排列。9年级。奇偶校验任务

图片

可能是冷的,暖气已关闭,并且计算(和加热)能力没有,但它们处于闲置状态。那为什么不给它们装些无用的东西,它们会温暖和娱乐。

但我会从远处开始。前几天,我遇到了一个高中的问题,措辞如下:“连续写出几个连续的正整数,这样,每三个连续的数字之和就可以完全被这个三元组的最左边的数字整除。 “如果最后一行是奇数,可以写出的最大数字是多少?”

有了这个限制,很容易证明在奇数的每个三元组中将有不止偶数。并且由于它们之间的差异不能超过1,因此序列的最大长度限制为5个数字。作为示例,我们可以给出序列4 5 3 2 1

详细的证明可以在这里找到

但是,如果我们删除对最后一个数字的奇数表示的限制怎么办?然后,在右侧可以添加数字7 6 8,将序列扩展为八个数字。您还可以添加一打,并将缺少的九个附加到左侧。好吧,这可能不是唯一的,也不是最长的排列。

实际上,我试图从逻辑上进行推理,但没有找到此类顺序局限性的证据,因此决定家用加热器中使用计算器进行分析对所有N进行粗略的穷举搜索选项很快显示出该方法的失败,但是定向枚举允许重大进展,并且结果同时是预期的和意外的。

事实证明,对于所有N,直到并包括29,实际上从1到N的数字排列都是如此,但是,在单个变量中,长度为27和29。但是,这还有差距。对于大小为30、31、32和33的排列,没有解;对于数字34,只有一个解。

这样
33 23 10 13 7 6 1 29 27 2 25 21 4 17 15 19 11 8 3 5 31 9 22 14 30 26 34 18 16 20 12 28 32 24

然后再说两个空格。对于值37和38,这样的序列不是单一的,然后是失败的。我什至是绝望的,接下来的十个人完全是空的,但是运气却微笑了,因为N = 51,仍然找到了必要的排列。

她在这
46 45 1 44 49 39 10 29 21 37 5 32 23 41 51 31 20 11 9 2 43 35 8 27 13 14 25 3 47 40 7 33 16 17 15 19 26 50 28 22 6 38 34 4 30 18 42 48 36 12 24

它们甚至有两个,但是它们大部分相交。

此外,再次计划了空度,至少对于数字52和53没有解决方案,但我没有进一步研究。但是,每一步,等待时间都成倍增长,房子已经变得越来越热,我决定暂时停下来。

如果减少一张表中找到的可能选项的数量,则可以构建以下图表





在最初的问题中,不需要从一个自然序列开始。最主要的是,从ab的所有数字在序列找到但是我尝试过,情况只会变得更糟,选择更少了。实际上,这是可以解释的。该数字在三元组的左侧位置越大,通过其他两个的总和获得的多样性就越低。可用的选项越少。嗯,这种序列的长度上限的问题仍然悬而未决。随着维数的增长,成功的可能性明显降低了,但是它无效了吗?或者,尽管很少,但它们将遇到这种(非)有趣的排列。

最后,也许您可​​以带入加热程序的代码,

的确,他在Haskell上
import Data.List (delete)
import Control.Parallel.Strategies
import System.Environment

pvc :: Int -> Int -> [Int] -> [[Int]]
pvc a b [] = [[a,b]]
pvc a b xs = [a:ys | 
    x <- xs, 
    mod (a + b + x) a == 0, 
    ys <- pvc b x (delete x xs)]

gen :: Int -> [[[Int]]]
gen n = 
    let ab = [(a, b) | a <- [1..n], b <- delete a [1..n]]
    in  map hlp ab `using` parList rseq
    where
    hlp (a,b) = pvc a b $ delete a $ delete b [1..n]

main = do
    [n] <- getArgs
    print $ concat $ gen $ read n


All Articles