最大公约数:
方法一(简单遍历):
分析:
如果是两个数a 和 b(a > b),那么他们两个的最小公约数一定位于[1, b]之间;
所以我们只需要在这个范围内进行简单的遍历即可求出最大公约数;
代码:
#include<stdio.h> int main() { long long a, b; long long min; scanf("%d %d", &a, &b); min = (a > b ? b : a); for (long long i = 1; i <= min; i++) { if ((a % min == 0) && (b % min == 0)) { printf("%lld", min); return 0; } } }
方法二(辗转相除法):
该方法用递归的思路比较好写就是经典的gcd函数
假设 a > b;
让后令 a = b, b = a % b;(1)
一直进行(1)直到 b = 0 的时候这时候的a就是最大公约数;
代码:
long long Gcd(long long a, long long b) { if (b == 0) return a; else { return Gcd(b, a % b); } }
方法三(更相减损法):
分析:a, b两个数字(a > b)
先将两个数字做差: a - b = c;
然后再将b和c之间做差,直到
b和c相等;
#include<stdio.h> //更相减损法 void swap(int* a,int* b) { if (*a < *b) { int t = *a; *a = *b; *b = t; } } int sub(int a, int b) { swap(&a, &b); if (a - b == 0) { return a; } else { a = a - b; sub(a, b); } } int main() { int a, b; scanf("%d %d", &a, &b); printf("%d", sub(a, b)); }
最小公倍数:
方法一(简单遍历):
分析:a, b (a > b)因为最小公倍数是一定大于a 且小于a * b 的,所以我们可以在[a, a * b]这个范围内遍历然后寻找最小公倍数
代码:
#include<stdio.h> //计算最小公倍数 Common(int a, int b) { int max = (a > b ? a : b); for (int i = max; i <= a * b; i++) { if ((i % a == 0) && (i % b == 0)) { return i; } } } int main() { int a, b; scanf("%d %d", &a, &b); printf("%d", Common(a, b)); }
方法二(利用最大公约数的计算结果):
最大公倍数等于两个数的乘积除以最大公约数
//辗转相除法计算 long long Gcd(long long a, long long b) { if (b == 0) return a; else { return Gcd(b, a % b); } } int main() { long long a, b; scanf("%lld %lld", &a, &b); //先计算最大公约数 //最大公倍数等于两个数字的其中一个数除以最大公倍数,在乘上另外一个数字就得到了最小公倍数 printf("%d", a * b / Gcd(a, b)); }
方法三:单次循环的方法:
给其中一个数乘于自然数k,然后当这个乘积可以整除另外一个数的时候,那么这个乘积就是最小公倍数了
代码如下:
#include<stdio.h> int main() { int a, b; int i; scanf("%d%d", &a, &b); for(i = 1; i < b; i++) { if(a * i % b == 0) } printf("%d", i * a); return 0; }
🍉如果帮到你了,点个赞👍吧,评论区也可以互相交流。