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