用户:
编程小吴查看:0 回复:2 评论:0 创建时间:2023-07-19T00:17:30

在今年的NOC复赛中,我做到了两道题,就是求两数的最大公约数和最小公倍数(类似的),然后我用了一种不用质数的方法,这就是船新的“分数加法”
(然而冤种的我最后一道没写完,被淘汰了
)
源码编辑器4.0的代码如下

Python的代码如下
import math as m
print('请输入一个小数')
v = float(input())
l = [m.floor(v),1]
r = [m.ceil(v),1]
while True:
a = l[0] + r[0]
b = l[1] + r[1]
if v > (a / b):
l[0] = a
l[1] = b
elif v < (a / b):
r[0] = a
r[1] = b
else:
break
print('表示为' + str(a) + '/' + str(b))
至于基本原理是:法里和,法里树以及二分查找的运用
详细介绍,见
【福特圆与怪异的分数加法(上)】 https://www.bilibili.com/video/BV16U4y1Y7aF/?share_source=copy_web
【福特圆与怪异的分数加法(下)】 https://www.bilibili.com/video/BV1ha41137oW/?share_source=copy_web
【嫌正片还不够长,于是再补充一期】 https://www.bilibili.com/video/BV1F24y1Z7TS/?share_source=copy_web
这个UP讲得很好,我也是从这些视频中受到了启发,有兴趣的可以关注一下
应用:
一、计算类小游戏,除法计算后却有时显示无限循环小数!
例:随机到了 2 / 6,可是显示了0.33333······,这时就可以用上述方法化简为1 / 3啦
操作:以源码编辑器为例,将变量“值”设为(2 / 6)就可以啦
二、求两数的最大公约数,最小公倍数
例:求6,10的最大公约数,最小公倍数
操作:以源码编辑器为例,将变量“值”设为(6 / 10),最终输出(3 / 5),此时用6除以3(或10除以5)得到的2就是两者的最大公约数,2乘3再乘5就是两者的最小公倍数啦
今天就分享到这里,bye~