news 2026/6/23 20:45:32

C语言之最大公约数和最小公倍数问题

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C语言之最大公约数和最小公倍数问题

题目描述

输入两个正整数 x0​,y0​,求出满足下列条件的 P,Q 的个数:

  1. P,Q 是正整数。

  2. 要求 P,Q 以 x0​ 为最大公约数,以 y0​ 为最小公倍数。

试求:满足条件的所有可能的 P,Q 的个数。

输入格式

一行两个正整数 x0​,y0​。

输出格式

一行一个数,表示求出满足条件的 P,Q 的个数。

输入

3 60

输出

4

说明/提示

P,Q 有 4 种:

  1. 3,60。
  2. 15,12。
  3. 12,15。
  4. 60,3。

对于 100% 的数据,2≤x0​,y0​≤10^5。

#include<stdio.h> int gcd(int a,int b)//判断最小公倍数 { while(b!=0){ int t=a%b; a=b; b=t; } return a;//a即为最小公倍数 } int main() { int x,y; scanf("%d%d",&x,&y); if(y%x!=0){//最小公倍数一定是最大公约数的倍数,如果不是,则没有解,直接打印出0退出。 printf("0\n"); return 0; } int n=y/x;//最小公倍数的作用只是和最大公因数找出p的范围。 int count=0; int p; for(p=1;p*p<=n;p++){ if(n%p==0){//虽然我们明确n=p*q,但是并不能确定1~sqrt(n)内的数除以p等于q. int q=n/p;//到这一步只是求得了p和q两个因子,但二者不一定是互质的,所以后面还要判断是否互质。只有是互质的才能得出x是最大公因数。 if((gcd(p,q))==1){//判断p和q是否互质 if(p==q){ count++;//说明在计算a和b这两个数的时候得到的a和b是相等的,只有一个结果,所以只需要加1. }else{ count+=2;//说明得到的a和b是不相等的, } } } } printf("%d\n",count); return 0; }

详细解析上述代码逻辑:数学逻辑挺强

1.n=y/x;最大公约数是x,最小公倍数是y,设这两个数为a,b,p和q为去掉最大公约数后,各自独有的部分。而a=x*p,b=x*q.其中p和q是互质的正整数,即二者除了1没有其他公因数。因为p和q还有大于1的公因数,则x就不是最大公约数了。

解析上述:假设有a=12,b=18,他们的最大公约数是6,即x=6。可以写成12=6*2,18=6*3,即a=12=x*p(2),b=18=x*q(3).一般化即为:a=x*p,b=x*q。

为什么p和q必须互质:如果a=40=10*4,b=60=10*6,则p和q不互质,则10不是二者的最大公约数,二者的最大公约数其实是20.所以如果p和q不互质,则x并不是最大公因数。

2.为什么要定义n=y/x:a*b=(x*p)*(x*q)=x^2*p*q,所以a*b/x=x*p*q,即最小公倍数y=a*b/x=x*p*q,所以y/x=p*q.所以令n=y/x,则n=p*q.

定义n=y/x,是因为n通常比y小很多,只需要对n进行因数分解,并检查每对因数是否互质,避免了直接枚举a和b大量结合。

3.实例演示:

假设x=3,y=60.计算n=y/x=60/3=20;

找到所有互质的整数对(p,q)使得p*q=20。20的因数对(1, 20)、(2, 10)、(4, 5)、(5, 4)、(10, 2)、(20, 1)。 其中互质的对是:(1, 20) 和 (4, 5)(注意 (5, 4) 与 (4, 5) 视为同一对的不同顺序,但通常只计算一次,因为 a 和 b 的顺序不影响数对)。对应的 (a, b) 为:(3*1, 3*20) = (3, 60)。(3*4, 3*5) = (12, 15)所以有两组解。(由题意得x=3,p和q互质只有p=1,q=20,所以a=x*p,b=x*q)(这是通过p和q计算的a和b两个数)

4.为什么循环是p*p<=n:我们要通过循环找到所有的(p,q)整数对,使得p*q=n;p和q互质

为什么用 p * p <= n 而不是 p <= n?

思想实验:

假设 n = 100:

· 如果 p = 1,那么 q = 100/1 = 100
· 如果 p = 2,那么 q = 100/2 = 50
· 如果 p = 4,那么 q = 100/4 = 25
· 如果 p = 5,那么 q = 100/5 = 20
· 如果 p = 10,那么 q = 100/10 = 10
· 如果 p = 20,那么 q = 100/20 = 5

由上述可得,当p>sqrt(n)时,相当于p和q又发生交换。我们要得到的p和q其实是p<=sqrt(n)时的值。这样可以减少遍历,因为二者一样的,只需要计数加2即可。

通过上述方法求出来的p和q并不是满足条件的两个数,而是因子,通过这两个因子求得的a和b才是最终的满足条件的两个数,即为下面的:

  1. 3,60。
  2. 15,12。
  3. 12,15。
  4. 60,3。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/23 17:52:56

LobeChat能否对接Telegram Bot?跨平台消息同步实现

LobeChat能否对接Telegram Bot&#xff1f;跨平台消息同步实现 在如今这个AI助手无处不在的时代&#xff0c;用户早已不满足于只能在浏览器里和大模型聊天。我们希望它能出现在手机通知栏、工作群聊中&#xff0c;甚至在通勤路上用语音快速问一句“今天天气怎么样”。这种“随…

作者头像 李华
网站建设 2026/6/23 10:17:01

AI如何用博图加速工业自动化开发

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个基于博图(TIA Portal)的AI辅助编程工具&#xff0c;能够根据用户输入的设备配置和工艺流程描述&#xff0c;自动生成西门子PLC的SCL或LAD程序代码。要求支持S7-1200/1500系…

作者头像 李华
网站建设 2026/6/23 17:49:45

Splashtop AEM 在 G2冬季报告中斩获“最佳预估 ROI”殊荣

在 IT 管理领域&#xff0c;如何在预算紧缩与威胁升级的双重压力下保障效率与安全&#xff0c;是每一支 IT 团队的核心挑战。近日&#xff0c;全球领先的软件评测平台 G2发布了首份《2026冬季自动端点管理&#xff08;AEM&#xff09;成果指数报告》&#xff0c;Splashtop AEM …

作者头像 李华
网站建设 2026/6/23 17:52:56

赋能传统硬件:具身智能如何激活工业机器人的二次生命

在不更换核心硬件的前提下&#xff0c;为存量巨大的传统巡检机器人装上“智慧大脑”&#xff0c;正成为工业智能化升级的新范式。在工业4.0与智能制造的浪潮下&#xff0c;许多企业面临一个现实困境&#xff1a;斥巨资购入的巡检机器人或仿生机器狗&#xff0c;因其智能水平有限…

作者头像 李华
网站建设 2026/6/23 17:49:46

【模板:求组合数】信息学奥赛一本通 1648:【例 1】「NOIP2011」计算系数 | 1866:【11NOIP提高组】计算系数 | 洛谷 P1313 [NOIP 2011 提高组] 计算系数

【题目链接】 ybt 1648&#xff1a;【例 1】「NOIP2011」计算系数 ybt 1866&#xff1a;【11NOIP提高组】计算系数 洛谷 P1313 [NOIP 2011 提高组] 计算系数 ybt 1648没有指明 k k k的范围&#xff0c;在ybt 1866&#xff0c; 洛谷P1313中都以指明 k ≤ 1000 k\le1000 k≤1000…

作者头像 李华