一、最大公约数(也叫公因数)

两个数的 最大公约数 是能够被两个数整除的最大正整数。

举例: 3 和 6 的最大公约数是3。“6和3的最大公因数是3。 6的因数有1,2,3,6,3的因数有1,3。两个数的最大公约数是能够被两个数整除的最大整数。

1071和462的最大公约数(也叫公因数)为21。

公因数公约数只是叫法上 的区别。两个数的最小公约数为1。

如何求?

辗转相除法:

以a=1071,b=462为例

首先取a,b中的最大值,假设最大值为a。首先用a减去b,一直减,减到当前的a小于b了。即a = 1071-462-462 = 147 < 462。此时我们要用b来减a了,停止条件也是b小于当前的a。那么就是b - a = 462 - 147 - 147 -147 = 21 < a。 现在b = 21,a等于147。我们继续用大的减去小的, 147 - 21 .-.(7个21) - 21 = 0 。 此时这个b即为他俩的最大公约数(公因数)

落实到编程中咋实现呢?

func gcd(a, b int) int {    // 传入两个数temp := 0    // 用来临时存放a-b的值for b != 0 {    // 终止条件是b==0temp = a % b    // a%b相当于 a一直减b,直到a小于b的时候的值a = b    // 这里为了方便一直用a%b,所以让ab的值互换了。此时的a为两个数中较大的b = temp    // b为 a%b的值}return a    // 当b==0的时候,也就是temp==0啊,那个时候被减数b就是最大公因子(公约数)
}

1979. 找出数组的最大公约数

// 1.先找出最大值和最小值
// 2.然后用辗转相除法求得最大公约数就可以了
func findGCD(nums []int) int {min, max := nums[0], nums[0]for _, v := range nums {if v > max {max = v}if v < min {min = v}}return gcd(max, min)
}func gcd(a, b int) int {temp :=0 for b != 0 {temp = a % ba,b = b, temp}return a
}

2427. 公因子的数目

func commonFactors(a int, b int) int {ans := 0for i:=1;i<=1000;i++{    // 由于数据规模不大,直接遍历if a % i == 0 && b % i == 0 {  // a、b同时可以取模一个数字且余数为0,此时的i就是一个ans++}}return ans
}

二、公倍数

公倍数(common multiple)是指在两个或两个以上的自然数中,如果它们有相同的倍数,这些倍数就是它们的公倍数。公倍数中最小的,就称为这些整数的最小公倍数(lowest common multiple)。注意:没有最大公倍数的说法。
        举例:求4和6的最小公倍数。

解答过程如下: 4=2×2,6=2×3。最小公倍数=2×2×3=12

如何求两个数的最小公倍数呢?

我们用:(借助辗转相除法),比较方便,因为前面求公约数就用的辗转相除法,方便一起记忆。

已知a和b两个数,最小公倍数 = (a*b)/ 最大公约数

如:4和6的最大公约数是2,那最小公倍数就是(4*6) /  2 = 12。因为两个数的乘积等于这两个数的最大公约数与最小公倍数的乘积。

那么转换成代码就很好写了,把上面的辗转相除法求公约数的函数写出来,然后a*b除以这个公约数就可以咯。

package mainimport "fmt"func main() {a := 4b := 6fmt.Println("4和6的最大公约数为:", gcd(a, b))fmt.Println("4和6的最小公倍数为:", 1, "两个数的最小公约数不用计算,是1 \n")// 求a和b的最小公倍数只要 a*b/它俩最大公约数  就可以了fmt.Println("4和6的最小公倍数为:", a*b/gcd(a, b))fmt.Println("4和6的最大公倍数为:", "Error:两个数没有最大公倍数(∞)")
}func gcd(a, b int) int {temp := 0for b != 0 {temp = a % ba = bb = temp}return a
}// output
4和6的最大公约数为: 2
4和6的最小公倍数为: 1 两个数的最小公约数不用计算,是1 4和6的最小公倍数为: 12
4和6的最大公倍数为: Error:两个数没有最大公倍数(∞)// 暴力做法
func main() {// 求4, 6 的最小公倍数a, b := 4, 6ans := make([]int, 0)for i := 0; i < 5; i++ {ans = append(ans, a)a += 4ans = append(ans, b)b += 6}sort.Ints(ans)for i := 0; i < len(ans)-1; i++ {if ans[i] == ans[i+1] {fmt.Println(ans[i])break}}
}

如何求三个数的最小公倍数呢?

思路:算了暴力把。

func main() {// 求6 10 15的最小公倍数a, b, c := 6, 10, 15ans := make([]int, 0)for i := 0; i < 5; i++ {ans = append(ans, a)a += 6ans = append(ans, b)b += 10ans = append(ans, c)c += 15}sort.Ints(ans)for i := 0; i < len(ans)-1; i++ {if ans[i] == ans[i+1] {fmt.Println(ans[i])break}}
}

其它... 算了算了,遇到再说把

公约数(也叫公因数)|公倍数 |小知识|Golang相关推荐

  1. 小猫爪:嵌入式小知识07-MCUXpresso GCC ld链接文件解析-链接代码至RAM

    小猫爪:嵌入式小知识07-MCUXpresso GCC ld链接文件解析-链接代码至RAM 1 前言 2 基本语法 3 实例解析 4 链接代码至RAM 4.1 链接自定义section至RAM 4.2 ...

  2. 关于SFV的小知识(转)

    关于SFV的小知识(转)[@more@]在下载Warez时经常可以看到一些.sfv的文件,到底这种文件是这么回事呢,这里有比较详细的说明:sfv是simple file verification(简单 ...

  3. 【C#小知识】C#中一些易混淆概念总结(三)---------结构,GC,静态成员,静态类...

    目录: [C#小知识]C#中一些易混淆概念总结 [C#小知识]C#中一些易混淆概念总结(二) ---------------------------------------分割线----------- ...

  4. 【C#小知识】C#中一些易混淆概念总结(七)---------解析抽象类,抽象方法

    目录: [C#小知识]C#中一些易混淆概念总结--------数据类型存储位置,方法调用,out和ref参数的使用 [C#小知识]C#中一些易混淆概念总结(二)--------构造函数,this关键字 ...

  5. GO小知识之实例演示 json 如何转化为 map 和 struct

    今天简单谈一些 JSON 数据处理的小知识.近期工作中,因为要把数据库数据实时更新到 elasticsearch,在实践过程中遇到了一些 JSON 数据处理的问题. 实时数据 实时数据获取是通过阿里开 ...

  6. 1 编码_TMS320F28379D之CLB解码多摩川编码器1——入手小知识(原创)

    今天,跟大家分享一下28379D的CLB解码多摩川绝对值编码器的一些入手小知识. 首先,28379是属于TI的2837x系列,D是双核版本,S是单核版本,S和D都是带CLB模块的,都可以实现位置解码, ...

  7. sam格式的结构和意义_BAM/SAM文件格式的一些小知识

    BAM/SAM文件的一些小知识 前言 如果不是在陈老师这读博,然后开始折腾BAM/SAM文件,我估计这辈子都不会了解到这么多东西吧 SAM/BAM简介 Sequence Alignment Map ( ...

  8. 安卓开发小知识 - 3

    内容来源:Android Development Tidbits // No. 3 这是第三次分享安卓开发中的一些小知识点.我们很高兴有这么多人知道了这个有趣的系列,并且对你们通过评论和邮件表达的支持 ...

  9. 蓝牙Bluetooth技术小知识

    蓝牙Bluetooth技术以及广泛的应用于各种设备,并将继续在物联网IoT领域担任重要角色.下面搜集整理了一些关于蓝牙技术的小知识,以备参考. 蓝牙Bluetooth技术始创于1994年,其名字来源于 ...

最新文章

  1. 采购订单的审批状态异常的处理,审批状态为:预审批或是处理中的单据
  2. 自学python需要多长时间-自学Python需要多长时间?
  3. 见光死怎么办?如何提升用户对网站的好感,提升转化?
  4. python显示数据长度_Python数据分析之初识可视化
  5. Mac下SourceTree导出更新文件
  6. cocostudio 实现换行功能的label (文本区) lua
  7. 如何升级cordova插件
  8. .Net Core手撸一个基于Token的权限认证
  9. python全局变量global线程安全_对python多线程与global变量详解
  10. 通过fiddler和逍遥模拟器模拟抓包android手机
  11. python资产管理系统_Python [5] IT资产管理(上)
  12. 美团信用卡现金分期怎么还?
  13. python remove函数_Python列表的remove方法的注意事项
  14. web性能压力测试工具http_load/webbench/ad
  15. XHTML跟HTML的区别
  16. 安装VS之后,excel每次启动都会配置Visual Studio的解决办法
  17. 使用 meson 编译代码
  18. UVM糖果爱好者教程 - 31.provides_responses?
  19. win7如何调整计算机c盘,win7系统让c盘和d盘合并的两种方法
  20. MacOS Monterey 12.1 (21C52) OC 0.7.6 / Cl 5142 / PE 三分区原版黑苹果镜像

热门文章

  1. java中的Set集合
  2. 常用的设计模式的学习与理解心得
  3. Docker-提交(Commit)自己的一个镜像
  4. Notepad++ Cheat Sheet
  5. 注册表处理之注册表检查
  6. Cache(高速缓存)的三种地址映像方式
  7. 如何让ChatGPT你写一个短视频脚本
  8. pytorch:深入理解 reshape(), view(), transpose(), permute() 函数
  9. Android Studio —— 弹窗
  10. 计算机常用英语 (带音标),常用计算机英语大全(含音标).doc