猫史档案馆


【实用小技巧】将小数转化为一个最简分数的方法&如何算出两数的最大公约数、最小公倍数而不用质数

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


emotion_星能猫_hi

在今年的NOC复赛中,我做到了两道题,就是求两数的最大公约数和最小公倍数(类似的),然后我用了一种不用质数的方法,这就是船新的“分数加法”

(然而冤种的我最后一道没写完,被淘汰了emotion_泪

源码编辑器4.0的代码如下

center_image

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~

 


回复

上一页1 页 / 共 1下一页
星星喵STARMEOW星星喵STARMEOW

很有用!感激不尽!!

点赞0


评论


chenmou9672chenmou9672

我做过一个类似的,网址:D://bcm/bf/新的作品-68.bcm4

点赞0


评论