首页 > 其他分享 >最大公约数和最小公倍数

最大公约数和最小公倍数

时间:2024-04-22 19:55:18浏览次数:25  
标签:公倍数 自然数 最小 求取 int 最大公约数

最大公约数(GCD)和最小公倍数(LCM)

最大公约数定义 :

             如果有一个自然数a能被自然数b整除,则称a为b的倍数,b为a的约数;
             几个自然数公有的约数,叫做这几个自然数的公约数;
             公约数中最大的一个公约数,称为这几个自然数的最大公约数(greatest common divisor,简写为gcd)

最小公倍数定义 :

             简单介绍,两个数共有的倍数中最小的数,例如2和3的公倍数有6,12,18,24...最小公倍数为6;
             在这里我们重点体现最大公约数和最小公倍数(lcm)关系:最小公倍数=两数的乘积/最大公约数

取余(c语言中):

             也就是求余数,使用的运算符是 %。C 语言中的取余运算只能针对整数,
             也就是说,% 的两边都必须是整数,不能是小数。
             另外,余数可以是正数也可以是负数,由 % 左边的整数决定:
             1.如果 % 左边是正数,那么余数也是正数;
             2.如果 % 左边是负数,那么余数也是负数;

while循环实现辗转相除法求取两个整数的最大公约数;

             而你,我的朋友,当你在尝试理解这个代码时,你应该会思考a和b的大小关系,要是a<b呢?
			   
             我们受惯性思维影响,印象中两个数取余,那么被除数应该大于除数,
             因为被除数小于除数的话,那么余数就是除数,好像取了个寂寞
			   
             当a<b时,我们可以发现第一次while循环之后,a和b交换了位置,
             此时a>b,我们就无需担心我们输入的两个整数是什么关系,无需比较两个数的大小。

利用最大公约数求取最小公倍数;

             这里我们还以两个整数a,b为例:  利用公式:最小公倍数=两数的乘积/最大公约数

             在这里我们先用函数递归求取最大公倍数,然后再用上述公式求取最小公倍数
             递归函数求取时就要考虑a和b的大小关系了;这里我们假设a>b...
             当然我们也可以先判断两个数的大小,如果a<b,那么我们交换a和b的位置,然后再进行递归...
			 
          (不要问我为什么不在whlie循环已经求取最大公约数的基础上写一个函数求取最小公倍数,因为我不会,是的,我不会...
	    在这里还希望有大佬指导一下如何在一个程序里利用whlie和公式求取最小公倍数,我借此机会学习,感激不尽!!)
代码
#include <stdio.h>

int GCD(int a,int b,int g) //while循环求取最大公约数
{
  while (g=a%b)
  {
       a=b;
       b=g;
  }
  return b;
}
/*    
int GCD (int a, int b)    //函数递归求取最大公约数
{
  int m;

	if(a<b)
 {
   m=a;
   a=b;
   b=m;
 }  
  
  if (b == 0)
  {
    return a;
  }	
	 else
	{
		return GCD(b, a % b);
	}
}
*/
int main(int argc, char const *argv[])
{
    int a,b,g;
     
    printf("请输入两个数字:");
    scanf("%d %d",&a,&b);

    printf("最大公约数为%d\n",GCD(a,b,g));

    //printf("最小公倍数为%d\n",  a * b / GCD(a,b)   ); //利用递归和公式:最小公倍数=两数的乘积/最大公约数求取最小公倍数

    return 0;
}

标签:公倍数,自然数,最小,求取,int,最大公约数
From: https://www.cnblogs.com/XG-madman/p/18151280

相关文章

  • P8207 [THUPC2022 初赛] 最小公倍树 题解
    题目大意有编号为\([L,R]\)区间的点,连接两个点\(x,y\)边权的为\(LCM(x,y)\),求这张图的最小生成树。\[1\leqL\leqR\leq10^6,R-L\leq10^5\]解题思路我们有一个结论:对于张图\(G\)中的一个生成子图\(E\),\(E\)之中的一条边\(k\)如果不在\(E\)最小生成树中,那么\(......
  • 回归问题求解 python---梯度下降+最小二乘法
      MSE=1/m*∑i=1m(yi−y^i)2 a=[1.,2.,3.,4.,5.,6.,7.,8.,9.]b=[3.,5.,7.,9.,11.,13.,15.,17.,19.]points=[[a[i],b[i]]foriinrange(len(a))]lr=0.001eps=0.0001m=len(......
  • MATLAB偏最小二乘回归(PLSR)和主成分回归(PCR)分析光谱数据
    全文链接:http://tecdat.cn/?p=2655最近我们被客户要求撰写关于偏最小二乘回归(PLSR)和主成分回归(PCR)的研究报告,包括一些图形和统计输出。此示例显示如何在matlab中应用偏最小二乘回归(PLSR)和主成分回归(PCR),并讨论这两种方法的有效性当存在大量预测变量时,PLSR和PCR都是对因变量建模......
  • SpringBoot+SpringSecurity6+Jwt最小化代码
    SpringBoot+SpringSecurity6+Jwt最小化代码[toc]零、参考资料https://blog.csdn.net/m0_71273766/article/details/132942056一、快速开始1.1、引入依赖<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0&quo......
  • 下列对于逻辑最小项的描述错误的是(   )。
    选项:A、最小项中每个变量只能以原变量或反变量的形式出现一次B、n变量有2^n项最小项C、两个不同的最小项之积为1D、全部最小项之和为1答案:C解析:逻辑最小项:在有n个变量的逻辑函数中,若m为包含n个因子的乘积项,而且这n个变量均以原变量或反变量的形式在m中出现一次,则称m为该......
  • 【数论】最大公因数和最小公倍数(GCD和LCM)
    最大公因数(GCD)两个数的最大公因数很好做,使用内置的库函数即可,注意x和y的类型要相同。llgcd=__gcd(x,y);如果要求多个数的最大公因数,那么初始化为0(因为根据定义,0和任何数x的gcd都是x,所以0是gcd操作的幺元),然后分别进行gcd即可。llgcd=0;for(inti=1;i<=n;++i)......
  • 最小生成树 Kruskal 算法
    Kruskal算法edge存储边起点、终点、边权fa[x]存储x的父节点1、先初始化父节点2、按边的权排序(贪心思想)3、如果不在同一集合内,把这条边加入最小生成树,并且合并两个集合,反之就跳过4、最后根据连接的点是否是顶点的个数减一确定能否生成最小生成树如下图,红色表示取的边和次......
  • Item31:最小化文件之间的编译依赖
    芝士wa2024.4.11Item31链接引子“你进入到你的程序中,并对一个类的实现进行了细微的改变。提醒你一下,不是类的接口,只是实现,仅仅是private的东西。然后你重建(rebuild)这个程序,预计这个任务应该只花费几秒钟。毕竟只有一个类被改变。你在Build上点击或者键入make(或者其它等......
  • 洛谷题单指南-数学基础问题-P1029 [NOIP2001 普及组] 最大公约数和最小公倍数问题
    原题链接:https://www.luogu.com.cn/problem/P1029题意解读:已知x,y,求有多少对p、q,使得p、q的最大公约数为x,最小公倍数为y。解题思路:枚举法即可。枚举的对象:枚举p,且p必须是x的倍数,还有p<=yq的计算:q=x*y/p,q要存在,必须x*y%p==0,且gcd(p,q)==x100分代码:#include......
  • LeetCode 2439. 最小化数组中的最大值
    给你一个下标从 0 开始的数组 nums ,它含有 n 个非负整数。每一步操作中,你需要:选择一个满足 1<=i<n 的整数 i ,且 nums[i]>0 。将 nums[i] 减1。将 nums[i-1] 加1。你可以对数组执行 任意 次上述操作,请你返回可以得到的 nums 数组中 最大值......