zoukankan      html  css  js  c++  java
  • 求最大公约数

    笔试遇到的题目中要求两数的最大公约数
    高中的知识,高效又普遍的方法是辗转相除法(欧几里得法)。

    辗转相除法的原理:
    假设用f(x, y)表示(x)(y)的最大公约数,取k = x/y,b = x%y,则(x = ky + b)
    如果一个数能够同时整除(x)(y),则必能同时整除(b)(y);而能够同时整除(b)(y)的数也必能同时整除(x)(y)
    (x)(y)的公约数与(b)(y)的公约数是相同的,其最大公约数也是相同的,则有f(x, y)= f(y, x%y)(y > 0),
    如此便可把原问题转化为求两个更小数的最大公约数,直到其中一个数为0,剩下的另外一个数就是两者最大的公约数。
     

    #coding=utf8
    
    #求最大公约数
    #辗转相除法
    def gcd(a,b):
    	if a<b:
    		a,b=b,a
    	while b!=0:
    		temp=a%b
    		a=b
    		b=temp
    	return a
    
    if __name__ == '__main__':
    	print gcd(100,105)
    
    
  • 相关阅读:
    字符串练习
    Python基础
    熟悉常见的Linux命令
    大数据概述
    实验三 递归下降分析法
    简化C语言文法
    实验一 词法分析程序实验
    词法分析程序
    制作首页的显示列表
    完成登录功能
  • 原文地址:https://www.cnblogs.com/iois/p/4865763.html
Copyright © 2011-2022 走看看