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的优雅回答!这个问题终于有道理了!