anonymous 发表于 2021-7-28 00:00:29

寻找形如1089 + 8019 = 9108的数

1089 + 8091 = 9180
1269 + 1692 = 2961
......
这样的4位数有25个,那么这样的5位数、6位数有多少个?

mathe 发表于 2021-7-28 10:42:52

穷举数目会随着长度的增长而变得越来越复杂。
但是我们可以轻松构造很长很长符合要求的结果。
我们找一个10的阶为p-1的素数p,比如p=7
那么由于
\(\frac17=0.142857....,\frac27=0.285714...,\frac37=0.428571...\)
可以得出142857+285714=428571
又比如
2/17=0.1176470588235294...
3/17=0.1764705882352941...
5/17=0.2941176470588235...
得出1176470588235294+1764705882352941=2941176470588235

ejsoon 发表于 2021-7-30 12:14:23

請問樓主,25組分別有哪些?

同時,你是如何求出這二十五組的?

hujunhua 发表于 2021-7-31 07:48:56

1089令我想起小学时在一本《科学实验》杂志上看到的一道题

科学实验
×       验
------------
验实学科

凑了半天搞出来了,被父亲狠狠地表扬了几次。可能是我玩趣味数学的发端。
小时候还是有点笨吧,现在觉得应该秒解。

anonymous 发表于 2021-7-31 10:03:28

本帖最后由 anonymous 于 2021-7-31 10:04 编辑

ejsoon 发表于 2021-7-30 12:14
請問樓主,25組分別有哪些?

同時,你是如何求出這二十五組的?

print([(i, j, i+j) for i in range(1000, 9999) for j in range(i, 9999-i) if sorted(str(i)) == sorted(str(j)) == sorted(str(i+j))])
[(1089, 8019, 9108), (1089, 8091, 9180), (1269, 1692, 2961), (1467, 6147, 7614), (1467, 6174, 7641),
(1476, 4671, 6147), (1503, 3510, 5013), (1530, 3501, 5031), (1746, 4671, 6417), (2385, 2853, 5238),
(2439, 2493, 4932), (2502, 2520, 5022), (2538, 3285, 5823), (2691, 6921, 9612), (2853, 5382, 8235),
(3285, 5238, 8523), (4095, 4950, 9045), (4095, 5409, 9504), (4392, 4932, 9324), (4590, 4950, 9540),
(4599, 4995, 9594), (4698, 4986, 9684), (4797, 4977, 9774), (4896, 4968, 9864), (4959, 4995, 9954)]

anonymous 发表于 2021-8-2 22:02:55

anonymous 发表于 2021-7-31 10:03
[(1089, 8019, 9108), (1089, 8091, 9180), (1269, 1692, 2961), (1467, 6147, 7614), (1467, 6174,...

这种方法简洁但是速度慢,肯定有更快的方法

northwolves 发表于 2021-8-8 09:00:01

这样的3-8位数分别有1, 25, 648, 17338, 495014, 17565942组。

3位数一组:459+495=954
5位数如: 13842+18342=32184

穷举9的倍数即可

northwolves 发表于 2021-8-9 10:26:53

anonymous 发表于 2021-7-31 10:03
[(1089, 8019, 9108), (1089, 8091, 9180), (1269, 1692, 2961), (1467, 6147, 7614), (1467, 6174,...

$i<=j,i+j<=9999->i<5000$

$ mod(i,9)=a,mod(j,9)=a,mod(i+j,9)=a=2a->a=0$

print([(9*i, 9*j, 9*(i+j)) for i in range(1112, 5555) for j in range(i, 11111-i) if sorted(str(9*i)) == sorted(str(9*j)) == sorted(str(9*(i+j)))])

葡萄糖 发表于 2023-1-12 20:20:38

【转载】
https://mathematica.stackexchange.com/a/233030/2090
满足条件的4位数有25组,满足条件的5位数有648组,满足条件的6位数有17338组。

mathe 发表于 2023-1-28 09:10:30

如图

对一个合法的算式,我们可以根据各位计算过程是否发生进位,分成若干段。
对于长度为1的段,我们可以把它们标为“单”, 图中为绿色部分。
对于长度大于1的段,每段最低位标为“末”,图中紫色部分,每段最高位标为“首”,图中红色部分,每段余下各位标为“中”,图中橙色部分。
如上图展示,对于属性相同的位,我们可以任意交换它们的位置而不改变结果的合法性,而且我们还可以任意重组所有的段。唯一的例外是如果一个“首”中包含0,那么我们不能把它安排在全局第一位。

所有合法的"首"要求两数之和不超过8,有8+0=9,7+1=9,7+0=8,6+2=9,6+1=8,6+0=7,...,0+8=9,0+7=8,...,0+0=1共(1+9)*9/2=45种不同的选择,其中包含0的有17种。
所有合法的“末”要求两数之和不小于10,有1+9=0,2+9=1,2+8=0,3+9=2,3+8=1,3+7=0,...,9+9=8,9+8=7,...,9+1=0共(1+9)*9/2=45种。
所有合法的“中”要求两数之和不小于9,有0+9=0,1+9=1,1+8=0,2+9=2,2+8=1,2+7=0,...,9+9=9,9+8=8,...,9+0=0共(1+10)*10/2=55种。
所有合法的"单"要求两数值和不超过9,有9+0=9,8+0=8,8+1=9,7+0=7,7+1=8,7+2=9,....,0+0=0,0+1=1,...,0+9=9共(1+10)*10/2=55种。
一个合法的结过首先需要选择相同数目的“首”和"末",余下的选择任意数目的“中”和"单",然后还额外要求三排中用到所有数字的数目相同。
然后对于这样选中的一个合法候选方案,我们可以先对“首”和"末"进行任意排列,排列好后将它们进行交替排列。然后将“中”任意插入某段(首末之间),将“单”任意插入段外。
需要注意的是,如果某个“首”包含0而且排在第一段,那么必须保证其前面有至少一个“单”。而这部分可以通过排列组合来计算,而不需要穷举,这样可以极大降低计算量。
页: [1] 2
查看完整版本: 寻找形如1089 + 8019 = 9108的数