首页 > 编程语言 >C语⾔编程题 计算最⼤公约数 和 打印最⼩公倍数

C语⾔编程题 计算最⼤公约数 和 打印最⼩公倍数

时间:2024-04-04 14:29:51浏览次数:12  
标签:两个 公倍数 编程 int 公约数 除法 解法

1. 计算最⼤公约数

1.1 题⽬描述:

      输⼊2个整数m和n,计算m和n的最⼤公约数,并打印出结果

2.2 解法思路:

       最⼤公约数是指两个或多个整数共有约数中最⼤的⼀个。为了求出两个数的最⼤公约数,可以采⽤:

 •枚举试除法:

 1. 具体来说,公约数⼀定⼩于两个数,从两个数中的较⼩值开始枚举;

 2. 从⼤到⼩依次判断能否同时整除这两个数,若某个数满⾜同时整除两个数,则其为公约       数;

3. 从⼤到⼩遍历找到公约数时,此数即为最⼤公约数,此时应当结束循环。

#include<stdio.h>
int main()
{
	int m = 0;
	int n = 0;
	scanf("%d %d", &m, &n);
	//计算找出m和n的较小值k
	//因为最⼤公约数最⼤是m和n的较⼩值
	int k = (m > n ? n : m); //三目操作符 m>n为真 则返回n  为假 则返回m
	while (1)
	{
		if (m % k == 0 && n % k == 0)
		{
			break;
		}
		k--;
	}
	printf("%d\n", k);
	return 0;
}

• 辗转相除法:

 辗转相除法也称为欧⼏⾥得算法,是⼀种⽤来求两个正整数最⼤公约数的⽅法。它基于⼀个  简单的数 学原理:如果 a 和 b 是两个正整数,且 a>b ,则a和b的最⼤公约数等于 b 和 a%b ( a 除以 b 所得的余数)的最⼤公约数。

辗转相除法的步骤如下:

1. 如果 a<b,将 a 和 b 交换。

2. 如果 a除以b,得到商q和余数r,即a=bq+r。

3.如果r等于0,则b就是最大公约数。

4.如果r不等于0,则再用b除以r,得到商q1和余数r1,即b=rq1+r1。

5.重复步骤3和步骤4,直到余数等于0为⽌。

6. 最后的除数就是两个数的最⼤公约数。

解法代码:

#include<stdio.h>
int main()
{
	int m = 0;
	int n = 0;
	scanf("%d %d", &m, &n);
	int k = 0;
	while (k = m % n)
	{
		m = n;
		n = k;
	}
	printf("%d\n", n);
	return 0;
}

2.打印最⼩公倍数

2.1 题⽬描述:

       输⼊2个整数m和n,计算m和n的最⼩公倍数,并打印出结果

2.2 解法思路:

最⼩公倍数是指两个或多个整数共有倍数中最⼩的⼀个。为了求出两个数的最⼩公倍数,可以采⽤:

 •枚举试除法: 

1. 公倍数⼀定⼤于两个数,从两个数中的较⼤值开始枚举;

2. 从⼩到⼤依次判断能否同时整除这两个数,若某个数满⾜同时被两个数整除,则其为公倍数;

3. 从⼩到⼤遍历找到公倍数时,此数即为最⼩公倍数,此时应当结束循环;

• 特别地,最⼩公倍数可以由两数乘积除以两数的最⼤公约数求得。

解法代码:

解法一:

#include<stdio.h>
int main()
{
	int m = 0;
	int n = 0;
	//计算m和n的较⼤值
	//m和n的最⼩公倍数,最⼩也是m和n中较⼤的值
	scanf("%d %d", &m, &n);
	int k = (m > n ? m : n);
	while (1)
	{
		if (k % m == 0 && k % n == 0)
		{
			printf("%d\n", k);
			break;
		}
		k++;
	}
	return 0;
}

解法二:

#include<stdio.h>
int main()
{
	int m = 0;
	int n = 0;
	scanf("%d %d", &m, &n);
	int k = 0;
	int mul = m * n;
	//辗转相除法求得最⼤公约数
	while (k=m%n)
	{
		m = n;
		n = k;
	}
	printf("%d\n", mul / n);
	return 0;
}

标签:两个,公倍数,编程,int,公约数,除法,解法
From: https://blog.csdn.net/2303_77692691/article/details/137347208

相关文章

  • 前端学习<四>JavaScript基础——01-编程语言和JavaScript简介
    计算机语言概念计算机语言:人与计算机之间通信的语言。它是人与计算机之间传递信息的媒介,它通过特定的语法规则和语义约定,将人类可理解的指令转化为计算机可以执行的机器指令。计算机程序:就是计算机所执行的一系列的指令集合,程序全部都是用我们所掌握的语言来编写的,如果我们......
  • Golang vs Java: 一场编程语言的较量
    在IT行业飞速发展的过程中,编程语言扮演着至关重要的角色。作为开发人员,选择合适的编程语言对于构建高效、可靠和可维护的应用程序至关重要。在这场编程语言的较量中,Golang和Java无疑是两个备受青睐的选择。我们现在将对这两种语言进行全面对比,探讨它们在性能、简洁性、并发......
  • [转帖]shell编程-条件判断
    1.按照文件的类型进行判断判断选项作用-b文件判断该文件是否存在,并且是否为块设备文件(是块设备文件为真)。-c文件判断该文件是否存在,并且是否为字符设备文件(是字符设备文件为真)。-d文件判断该文件是否存在,并且是否为目录文件(是目录文件为真)。-e文件判断该文件是否存在(......
  • Linux C编程一站式学习 part3: Linux系统编程
    LinuxC编程一站式学习(akaedu.github.io)28.文件与I/O29.文件系统30.进程31.Shell脚本32.正则表达式33.信号34.终端、作业控制与守护进程35.线程36.TCP/IP协议基础37.socket编程......
  • EF Core异步编程
    异步编程本文内容异步LINQ运算符客户端异步LINQ运算符当在数据库中执行查询时,异步操作可避免阻止线程。对于在富客户端应用程序中保持响应式UI,异步操作很重要,还可以增加Web应用程序中的吞吐量,从而释放线程来为Web应用程序中的其他请求提供服务。按照.NET标准,EFCore......
  • 小美走公路(美团2024届秋招笔试第一场编程真题)
    题面核心思想正走一遍,反走一遍。代码importjava.util.*;publicclassMain{publicstaticvoidmain(String[]args){finallongMOD=(long)(1e9+7);Scannerscanner=newScanner(System.in);intn=scanner.nextInt();......
  • 小美的排列构造(美团2024届秋招笔试第一场编程真题)
    题面核心思想贪心最大最小次大次小·····这样就行了。代码importjava.util.*;publicclassMain{publicstaticvoidmain(String[]args){finallongMOD=(long)(1e9+7);Scannerscanner=newScanner(System.in);int......
  • 小美的排列询问(美团2024届秋招笔试第一场编程真题)
    题面核心思想模拟需要注意的是1~n只会出现一次所有nums[i]如果等于x(或y),下一位等不等于y(或x),就可以直接判断出结果了。代码importjava.util.*;publicclassMain{publicstaticvoidmain(String[]args){finallongMOD=(long)(1e9+7);......
  • Cush:从辞职自学编程到被 Apple、PriceTag推荐
    名字:Cush开发者/团队:ShaSha平台:iOS、macOS请简要介绍下这款产品也许你听过记账可以帮助省钱,但总是浅尝辄止?快试试Cush!它精简了记账中所有复杂繁琐的步骤,简单精美,让你轻松养成记账习惯!与此同时,在你超支时,Cush还会醒目地提醒你,让你每一天、每一笔都能省钱!这个月末不再超......
  • 什么是反应式编程?
    反应式编程是一种基于异步数据流和基于事件的实时处理的编程范式。这意味着操作并不会等待彼此同步完成。它支持非阻塞操作,并允许通过观察事件实时异步执行其他操作。反应式编程通过在运行时监控其他进程的执行情况来实现现实事件和异步执行。现如今许多应用程序都需要能处理大量......