「Mac玩转仓颉内测版48」小学奥数篇11 - 最大公约数与最小公倍数
2024-12-09 23:21:33
140次阅读
0个评论
最后修改时间:2024-12-10 23:32:29
本篇将通过 Python 和 Cangjie 双语实现最大公约数(GCD)和最小公倍数(LCM)的计算。这个题目帮助学生理解如何运用数学算法,并将其与编程实现结合。
关键词
- 小学奥数
- Python + Cangjie
- 最大公约数(GCD)
- 最小公倍数(LCM)
一、题目描述
编写一个程序,接收两个正整数,计算并输出它们的最大公约数和最小公倍数。
-
最大公约数(GCD):两个数的最大公约数是能同时整除这两个数的最大整数。
-
最小公倍数(LCM):两个数的最小公倍数是能同时被这两个数整除的最小整数。
-
输入格式:从控制台输入两个正整数。
-
输出格式:输出这两个数的最大公约数和最小公倍数。
二、Python 实现
# 最大公约数(GCD)计算
def gcd(a, b):
if b == 0:
return a
else:
return gcd(b, a % b)
# 最小公倍数(LCM)计算
def lcm(a, b):
return (a * b) // gcd(a, b)
# 接收用户输入
a = int(input("请输入第一个整数: "))
b = int(input("请输入第二个整数: "))
# 计算并输出结果
gcd_result = gcd(a, b)
lcm_result = lcm(a, b)
print(f"最大公约数: {gcd_result}")
print(f"最小公倍数: {lcm_result}")
三、Cangjie 实现
package cjcDemo
import std.convert.* // 导入数据转换模块
import std.console.* // 导入控制台输入输出模块
import std.format.* // 导入格式化模块
// 定义函数接收并转换用户输入为 Int64
func inputInt(info: String): Int64 {
print(info) // 输出提示信息
let number: Int64 = Int64.parse(Console.stdIn.readln().getOrThrow()) // 读取并转换输入
return number
}
// 递归实现最大公约数(GCD)计算
func gcd(a: Int64, b: Int64): Int64 {
if (b == 0) {
return a
} else {
return gcd(b, a % b)
}
}
// 使用最大公约数求最小公倍数(LCM)
func lcm(a: Int64, b: Int64): Int64 {
return (a * b) / gcd(a, b)
}
main(): Int64 {
let a = inputInt("请输入第一个整数: ")
let b = inputInt("请输入第二个整数: ")
let gcd_result = gcd(a, b)
let lcm_result = lcm(a, b)
println("最大公约数: ${gcd_result}")
println("最小公倍数: ${lcm_result}")
return 0
}
四、图形展示(扩展部分)
以下代码使用 Python 生成最大公约数和最小公倍数计算的可视化图形。本部分是进阶扩展内容,当前阶段不要求理解:
from PIL import Image, ImageDraw, ImageFont
# 创建画布
img = Image.new('RGB', (600, 300), color='white')
draw = ImageDraw.Draw(img)
font = ImageFont.load_default()
# 绘制最大公约数和最小公倍数的结果
draw.text((10, 10), "最大公约数 (GCD): 6", fill="black", font=font)
draw.text((10, 50), "最小公倍数 (LCM): 36", fill="black", font=font)
# 保存图像
img_path = "gcd_lcm_visualization.png"
img.save(img_path)
print(f"图形已保存为 {img_path}")
生成的图像如下:
五、示例执行
示例 1:
输入:
第一个整数: 12
第二个整数: 18
输出:
最大公约数: 6
最小公倍数: 36
示例 2:
输入:
第一个整数: 7
第二个整数: 5
输出:
最大公约数: 1
最小公倍数: 35
六、小结
通过这道最大公约数与最小公倍数的题目,学生学习了递归算法的基本用法,并掌握了如何在编程中实现数学计算。这个题目也帮助学生理解了数学算法在实际编程中的应用。
上一篇: 「Mac玩转仓颉内测版47」小学奥数篇10 - 数列求和
下一篇: 「Mac玩转仓颉内测版49」小学奥数篇12 - 解简易方程组
作者:SoraLuna 链接:https://www.nutpi.net 來源:坚果派 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
00
- 0回答
- 1粉丝
- 0关注
相关话题
- 「Mac玩转仓颉内测版47」小学奥数篇10 - 数列求和
- 「Mac玩转仓颉内测版39」小学奥数篇2 - 如何分糖果
- 「Mac玩转仓颉内测版46」小学奥数篇9 - 基础概率计算
- 「Mac玩转仓颉内测版49」小学奥数篇12 - 图形变换与坐标计算
- 「Mac玩转仓颉内测版41」小学奥数篇4 - 分数加减法
- 「Mac玩转仓颉内测版40」小学奥数篇3 - 找出神秘数字
- 「Mac玩转仓颉内测版50」小学奥数篇13 - 动态规划入门
- 「Mac玩转仓颉内测版45」小学奥数篇8 - 排列组合计算
- 「Mac玩转仓颉内测版42」小学奥数篇5 - 圆和矩形的面积计算
- 「Mac玩转仓颉内测版38」小学奥数篇1 - 如何平分6个苹果和4个橘子
- 「Mac玩转仓颉内测版31」基础篇11 - Unit 与 Nothing 类型详解
- 「Mac玩转仓颉内测版43」小学奥数篇6 - 一元一次方程求解
- 「Mac玩转仓颉内测版44」小学奥数篇7 - 二元一次方程组求解
- 「Mac玩转仓颉内测版11」PTA刷题篇2 - L1-002 打印沙漏
- 「Mac玩转仓颉内测版20」PTA刷题篇11 - L1-011 A-B