zoukankan      html  css  js  c++  java
  • Python 判断公约数、公倍数

    一、判断最大公约数:

    我想到的:

    def hcf(x,y):
        if x > y :
            small = y
        else:
            small = x
        for i in range(small,1,-1):
        # for i in range(1,small + 1):
            print("Inter i word", i)
            if x % i == 0 and y % i == 0:
                print("Max",i)
                break

    一开始我想到的是我注释的那一行,就是正取值,举例:12和24,结果为循环的最后一次的值:12,我想循环这么多次,在开发中,浪费太大,我反过来循环取值,

    第一次不就取到了,就是现在运行的。后来又想到一对数值:24,39,这种情况下,正循环比反循环循环次数更少。所以想是否有更好的方法。

    我搜到的:辗转相除法(自认为效果最好的)

    def gcd(x, y):
        m = max(x, y)
        n = min(x, y)
        while m%n:
            m, n = n, m%n
        return n

     欧几里得算法又称辗转相除法,是指用于计算两个非负整数a,b的最大公约数

    二、判断公倍数

    def MinNum(x,y):
        m = max(x,y)
        while True:
            if (m % x == 0) and (m % y == 0):
                MinNum = m
                break
         m += 1
        return MinNum

    这是我一开始想到的,感觉要是数字过大,循环次数过多,又想到辗转相除法的到最大公约数,得到下面方法:

    def gbs(x,y):
        m = max(x,y)
        n = min(x,y)
        while m % n :
            m,n = n,m%n
        return (x // n) * (y // n) * n
    当你的才华撑不起你的野心时,你需要静下心来学习。
  • 相关阅读:
    MS SQL Sever数据库还原
    IIS 7.5 配置伪静态
    黑马程序员-out和ref
    黑马程序员-结构
    黑马程序员-ReadInt
    黑马程序员-hashtable
    黑马程序员-冒泡排序
    黑马程序员-快速排序
    黑马程序员-for和foreach
    黑马程序员-集合和索引器
  • 原文地址:https://www.cnblogs.com/z977690557/p/14474940.html
Copyright © 2011-2022 走看看