Math 有多少种方法可以得到x的连续整数的和?
如何以编程方式解决这些问题: 有多少种不同的写作方式:Math 有多少种方法可以得到x的连续整数的和?,math,permutation,Math,Permutation,如何以编程方式解决这些问题: 有多少种不同的写作方式: a) 2021年为连续整数之和 b) x是连续整数的和 假设数字的顺序不重要,则有8518741657943308344041302580996941768179250799方法将2021写入正整数之和。它叫“世界杯”。没有一个简单的公式,但有一个递归关系,可以计算很多值 该函数在Python中实现: 来自sympy导入分区的 打印(分区(2021)) 现在,对于新问题,将2021写成连续整数之和:n+n+1+…+m-1+m=2021
- a) 2021年为连续整数之和
- b) x是连续整数的和
假设数字的顺序不重要,则有
8518741657943308344041302580996941768179250799
方法将2021
写入正整数之和。它叫“世界杯”。没有一个简单的公式,但有一个递归关系,可以计算很多值
该函数在Python中实现:
来自sympy导入分区的
打印(分区(2021))
现在,对于新问题,将2021
写成连续整数之和:n+n+1+…+m-1+m=2021
。首先请注意,n
的负值不会添加任何有趣的内容。当n<-m
时,总和显然是负数。否则,负值会“吃掉”相应的正值,得到与正解相同的和
从1
到m
的数字之和是tri(m)=m*(m+1)/2
,()。从n
到m
的数字之和正好是tri(m)-tri(n-1)
。这些方程可通过以下方法求解:
从z3导入Int、Solver和或sat
s=解算器()
m=Int('m')
n=Int('n')
s、 增加(和(n>0,n<2022))
s、 增加(n 0,m<2022))
s、 加(m*(m+1)-n*(n-1)==2021*2)
而s.check()==sat:
mi=s.model()[m].as_long()
ni=s.model()[n].as_long()
如果ni>mi-30:
打印(“+”.join([str(i)表示范围内的i(ni,mi+1)]),end=“=”)
其他:
打印(“+”.join([str(i)表示范围(ni,ni+6)中的i)],“+…+”,
“+”.join([str(i)表示范围内的i(mi-4,mi+1)]),end=“=”,sep=“”)
打印(总和([i代表范围内的i(ni,mi+1)])
s、 加(或(m!=mi,n!=ni))
输出:
26+27+28+29+30+...+64+65+66+67+68=2021
20+21+22+23+24+...+62+63+64+65+66=2021
1010+1011=2021
2021=2021
因此,对于2021年,有4个正解(以及4个相应的解,其中包括从
1-n
到m
的负数)。真的!哇,我从没想到会有这么多数字!如果数字的顺序很重要,数字必须是连续的,并且可能有负值,该怎么办?问题中的一个例子:*3=1+2,3=0+1+2,3=-2+-1+0+1+2+3。**我知道这是一个不寻常的问题!标题与问题的主体不符。对于2021=43*47
来说,将其写成连续整数之和的方法有2*2-1=3
,例如,请参见(这不包括单个术语2021=2021
sum)。@dxiv,你能告诉我标题应该是什么吗?标题上写着“连续”和“排列”而实际的问题是两者都没有,所以很难猜出你想问哪一个。哦。。。我没想到会这样!为这个愚蠢的标题感到抱歉!谢谢@JohanC的优雅回答!这个问题终于有道理了!