Python蓝桥杯练习02——互质个数、求最大公约数、最小公倍数

题目

在不超过19000的正整数中,与19000互质的数的个数是多少?

思路

求最大公约数、辗转相处法

a / b=k + r(a,b,k,r皆为正整数,且r < b),则r = a mod b。

欧几里得算法指出,对于整数a和b,如果a可以被b整除,那么它们的最大公因数为b。然而,如果a不可以被b整除,那么结果就是b与(a除以b的余数 r)的最大公因数。

代码一

def ac(a,b):
    mod=2  #随便定义一个余数
    while mod!=0: #当余数等于0是最大公约数
        mod=a%b 
        a=b
        b=mod
    return a
d=ac(12,26)
print(d) #2

#求互质个数
s=0
for i in range(1,19000):
    if ac(i,19000)==1: #最大公约数是1
        s+=1
print(s)

实现欧几里得算法 

欧几里得算法:gcd(a,b)=gcd(b,a mod b)

eg: gcd(60,21) = gcd(21,18) = gcd(18,3) = gcd(3,0) = 3

def gcd(a,b):
    if b==0:
        return a
    else:
        return gcd(b,a%b)
print(gcd(2,3)) #1

【思路】

需要使用递归来完成,可以看到,当除数为0是推出递归的条件

结果

最小公倍数计算

代码

def gbs(a,b):
    

    #从最大值开始计算,获取最大值
    if a>b:
        maxnum=a
    else:
        maxnum=b
    while True:
        if maxnum % a == 0 and maxnum % b == 0:
            mx=maxnum
            break
        maxnum+=1
    return mx
a,b=12,2
print(gbs(a,b))

结果

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值