四时宝库

程序员的知识宝库

【PythonTip题库精编300题】第31题:最小公倍数

1、编程试题:

编写一个程序,找出能被从1到给定数字n(包括n)的所有数字整除的最小正数(即最小公倍数)。

定义函数smallest_multiple()的函数,参数为n。

在函数内,返回能被从1到给定数字n(包括n)的所有数字整除而无余数的最小正数。

备注:比如,对于输入5,最小公倍数是60,因为60能被1、2、3、4、5整除,且是最小的正数

2、代码实现:

#!/usr/bin/python3.9
# -*- coding: utf-8 -*-
#
# Copyright (C) 2024 , Inc. All Rights Reserved
#
# @Time      : 2024/1/6 19:13
# @Author    : fangel
# @FileName  : 31. 最小公倍数.py
# @Software  : PyCharm

#求两个数的最大公约数
def gcd(a,b):
    while(a%b != 0):
        c = a % b
        a = b
        b = c
    return b

def smallest_multiple(n):
    #考虑特殊情况
    if n == 1 or n == 2:
        return n
    a = 2
    #从3开始循环
    for j in range(3,n+1):
        b = j
        num = a * b
        #最小公倍数即两个数的乘积除以最大公约数
        tmp = num / gcd(a,b)
        a = tmp
    return int(tmp)

# 输入n
n = int(input())
# 调用函数
print(smallest_multiple(n))

3、代码分析:

该题目考察两个数最小公倍数的算法,即两个数的乘积除以最大公约数,然后依次循环,求出指定数以内的最小公倍数。可以参考下面的示意图

4、运行结果:

输入:6

输出:60

输入:10

输出:2520

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接