数学中国

 找回密码
 注册
搜索
热搜: 活动 交友 discuz
楼主: 天山草

如何把 1/7 拆分成四个不同单位分数的和,并且四个分母之和为最小?

[复制链接]
发表于 2026-1-17 10:34 | 显示全部楼层
原理和方法仍然有待研究,网友的方法很有效(不过我仍然不太明白),其中的某些参数需要研究和修改。
经过验证1/7拆分成4个单位分数的和,其分母的最小和值是120,但,不懂计算原理,我仍然无法证明!

学习了,谢谢网友!给您点赞!
回复 支持 反对

使用道具 举报

发表于 2026-1-17 12:29 | 显示全部楼层
这回可以输出最小解了
输入:2
输出:
2  41  {4,10,12,15}
解的个数为: 3组

输入:7
输出:
7  120  {21,24,35,40}
解的个数为: 12组

输入:8
输出:
8  135  {24,30,36,45}
解的个数为: 20组

输入:9
输出:
9  153  {26,36,39,52}
解的个数为: 18组

输入:10
输出:
10  168  {30,40,42,56}
解的个数为: 22组

输入:11
输出:
11  180  {36,44,45,55}
解的个数为: 7组

是参考网友7#楼的代码,虽然不太懂

谢谢网友!!

稍加修改后的代码如下:

Private Sub Command1_Click()
Dim n, a As Double
n = Val(Text1)
m = Val(24 * n)
a = Val(1 + n)

Do While a >= Val(n) And a <= 5 * n
b = Val(a + 1)


Do While b <= Val(6 * n)
c = Val(b + 1)

Do While c <= Val(10 * n)

u = Val(a * b * c * n)
v = Val(a * b * c - n * (a * b + (a + b) * c))
If Val(v) > 0 Then
d = Val(u / v)

If c < d And u Mod Abs(v) = 0 Then
k = Val(a + b + c + d)
If k <= m Then
m = k
s = "{" & a & "," & b & "," & c & "," & d & "}"
s2 = n & "  " & m & "  " & s & vbCrLf
s3 = s3 + 1
End If
End If
End If

c = Val(c + 1)
Loop
b = Val(b + 1)
Loop


a = Val(a + 1)
Loop
If s3 > 0 Then
Text2 = s2 & "解的个数为: " & s3 & "组"
Else
Text2 = "无解"
End If


End Sub

Private Sub Command2_Click()
Text1 = ""
Text2 = ""
Text3 = ""
End Sub
回复 支持 反对

使用道具 举报

发表于 2026-1-17 13:06 | 显示全部楼层
如何把 1/7 拆分成四个不同单位分数的和,并且四个分母之和在某整数内为最大:
输入:7和50000
输出:
7  24441  {12,29,40,24360}
解中分母的和值不同的解的个数为: 7组

输入:7和20000
输出:
7  18549  {16,20,33,18480}
解中分母的和值不同的解的个数为: 8组

输入:7和90000
输出:
7  24441  {12,29,40,24360}
解中分母的和值不同的解的个数为: 7组

输入:7和210000
输出:
7  24441  {12,29,40,24360}
解中分母的和值不同的解的个数为: 7组

输入:7和310000
输出;
7  24441  {12,29,40,24360}
解中分母的和值不同的解的个数为: 7组

参数不变的情况下是有最大和值解的,求最大和值,参数也要变化

程序代码如下:
Private Sub Command1_Click()
Dim n, a As Double
n = Val(Text1)
m = Val(24 * n)
a = Val(1 + n)
m1 = Val(Text3)
Do While a >= Val(n) And a <= 5 * n
b = Val(a + 1)


Do While b <= Val(6 * n)
c = Val(b + 1)

Do While c <= Val(10 * n)

u = Val(a * b * c * n)
v = Val(a * b * c - n * (a * b + (a + b) * c))
If Val(v) > 0 Then
d = Val(u / v)

If c < d And u Mod Abs(v) = 0 Then
k = Val(a + b + c + d)
If k >= m And k <= m1 Then
m = k
s = "{" & a & "," & b & "," & c & "," & d & "}"
s2 = n & "  " & m & "  " & s & vbCrLf
s3 = s3 + 1
End If
End If
End If

c = Val(c + 1)
Loop
b = Val(b + 1)
Loop


a = Val(a + 1)
Loop
If s3 > 0 Then
Text2 = s2 & "解中分母的和值不同的解的个数为: " & s3 & "组"
Else
Text2 = "无解"
End If


End Sub

Private Sub Command2_Click()
Text1 = ""
Text2 = ""
Text3 = ""
End Sub

回复 支持 反对

使用道具 举报

发表于 2026-1-17 13:14 | 显示全部楼层
输入:7和310000
输出:
7  145055  {9,46,100,144900}
需要比较的解的个数为: 3组

参数修改后的代码如下:

Private Sub Command1_Click()
Dim n, a As Double
n = Val(Text1)
m = Val(24 * n)
a = Val(1 + n)
m1 = Val(Text3)
Do While a >= Val(n) And a <= 5 * n
b = Val(a + 1)


Do While b <= Val(10 * n)
c = Val(b + 1)

Do While c <= Val(20 * n)

u = Val(a * b * c * n)
v = Val(a * b * c - n * (a * b + (a + b) * c))
If Val(v) > 0 Then
d = Val(u / v)

If c < d And u Mod Abs(v) = 0 Then
k = Val(a + b + c + d)
If k >= m And k <= m1 Then
m = k
s = "{" & a & "," & b & "," & c & "," & d & "}"
s2 = n & "  " & m & "  " & s & vbCrLf
s3 = s3 + 1
End If
End If
End If

c = Val(c + 1)
Loop
b = Val(b + 1)
Loop


a = Val(a + 1)
Loop
If s3 > 0 Then
Text2 = s2 & "需要比较的解的个数为: " & s3 & "组"
Else
Text2 = "无解"
End If


End Sub

Private Sub Command2_Click()
Text1 = ""
Text2 = ""
Text3 = ""
End Sub

回复 支持 反对

使用道具 举报

发表于 2026-1-17 13:19 | 显示全部楼层
没有最大和值,即使某数内的最大和值也需要调整参数才能找到,否则照出来的也不一定对
回复 支持 反对

使用道具 举报

发表于 2026-1-17 13:27 | 显示全部楼层
输入:7和310000
输出:
7  306778  {9,34,429,306306}
需要比较的解的个数为: 3组

稍微改了一下参数,结果就不一样了,这是最大和值吗?不一定,找最大和值,没有意义了!(还是找最小值有意义)

代码如下:
Private Sub Command1_Click()
Dim n, a As Double
n = Val(Text1)
m = Val(24 * n)
a = Val(1 + n)
m1 = Val(Text3)
Do While a >= Val(n) And a <= 5 * n
b = Val(a + 1)


Do While b <= Val(10 * n)
c = Val(b + 1)

Do While c <= Val(700 * n)

u = Val(a * b * c * n)
v = Val(a * b * c - n * (a * b + (a + b) * c))
If Val(v) > 0 Then
d = Val(u / v)

If c < d And u Mod Abs(v) = 0 Then
k = Val(a + b + c + d)
If k >= m And k <= m1 Then
m = k
s = "{" & a & "," & b & "," & c & "," & d & "}"
s2 = n & "  " & m & "  " & s & vbCrLf
s3 = s3 + 1
End If
End If
End If

c = Val(c + 1)
Loop
b = Val(b + 1)
Loop


a = Val(a + 1)
Loop
If s3 > 0 Then
Text2 = s2 & "需要比较的解的个数为: " & s3 & "组"
Else
Text2 = "无解"
End If


End Sub

Private Sub Command2_Click()
Text1 = ""
Text2 = ""
Text3 = ""
End Sub
回复 支持 反对

使用道具 举报

发表于 2026-1-17 13:50 | 显示全部楼层
13  216  {39,52,60,65}
需要比较的解的个数为: 9组
这也是四个分母的最小和值。

代码如下:

Private Sub Command1_Click()
Dim n, a As Double
n = Val(Text1)
m = Val(24 * n)
a = Val(1 + n)
m1 = Val(Text3)
Do While a >= Val(n) And a <= 5 * n
b = Val(a + 1)


Do While b <= Val(10 * n)
c = Val(b + 1)

Do While c <= Val(50 * n)

u = Val(a * b * c * n)
v = Val(a * b * c - n * (a * b + (a + b) * c))
If Val(v) > 0 Then
d = Val(u / v)

If c < d And u Mod Abs(v) = 0 Then
k = Val(a + b + c + d)
If k <= m Then
m = k
s = "{" & a & "," & b & "," & c & "," & d & "}"
s2 = n & "  " & m & "  " & s & vbCrLf
s3 = s3 + 1
End If
End If
End If

c = Val(c + 1)
Loop
b = Val(b + 1)
Loop


a = Val(a + 1)
Loop
If s3 > 0 Then
Text2 = s2 & "需要比较的解的个数为: " & s3 & "组"
Else
Text2 = "无解"
End If


End Sub

Private Sub Command2_Click()
Text1 = ""
Text2 = ""
Text3 = ""
End Sub
回复 支持 反对

使用道具 举报

发表于 2026-1-17 16:13 | 显示全部楼层
输入:100
输出:
100  1611  {350,406,420,435}   不知道是否正确,需要验证一下!
需要比较的解的个数为: 66组

代码如下:

Private Sub Command1_Click()
Dim n, a As Double
n = Val(Text1)
m = Val(24 * n)
a = Val(1 + n)
m1 = Val(Text3)
Do While a >= Val(n) And a <= 5 * n
b = Val(a + 1)


Do While b <= Val(5 * n)
c = Val(b + 1)

Do While c <= Val(10 * n)

u = Val(a * b * c * n)
v = Val(a * b * c - n * (a * b + (a + b) * c))
If Val(v) > 0 Then
d = Val(u / v)

If c < d And Val(u - Int(u / v) * Abs(v)) = 0 Then
k = Val(a + b + c + d)
If k <= m Then
m = k
s = "{" & a & "," & b & "," & c & "," & d & "}"
s2 = n & "  " & m & "  " & s & vbCrLf
s3 = s3 + 1
End If
End If
End If

c = Val(c + 1)
Loop
b = Val(b + 1)
Loop


a = Val(a + 1)
Loop
If s3 > 0 Then
Text2 = s2 & "需要比较的解的个数为: " & s3 & "组"
Else
Text2 = "无解"
End If


End Sub

Private Sub Command2_Click()
Text1 = ""
Text2 = ""
Text3 = ""
End Sub
回复 支持 反对

使用道具 举报

发表于 2026-1-17 16:36 | 显示全部楼层
本帖最后由 ysr 于 2026-1-17 08:38 编辑
ysr 发表于 2026-1-17 08:13
输入:100
输出:
100  1611  {350,406,420,435}   不知道是否正确,需要验证一下!


经过验证100  1611  {350,406,420,435},这一组解是对的
也就是1/350+1/406+1/420+1/435=8526/852600=1/100

点评

正确——{100, 1611, {350, 406, 420, 435}——7#代码有瑕疵。  发表于 2026-1-17 17:27
回复 支持 反对

使用道具 举报

发表于 2026-1-17 17:50 | 显示全部楼层
网友点评:”正确——{100, 1611, {350, 406, 420, 435}——7#代码有瑕疵。“
答:谢谢朋友的指导和鼓励!
7#的代码也不是有瑕疵,仅仅是参数需要调整而已,设a <b< c< d,我认为a≥n+1,a的最低值应该取到n+1,而不是仅仅2*n以上的数,
随着整数的增大,其他参数也可能需要微量调整。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|数学中国 ( 京ICP备05040119号 )

GMT+8, 2026-3-4 18:30 , Processed in 1.189491 second(s), 14 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表