[NOIP2001 普及组] 最大公约数和最小公倍数问题

题目描述

洛谷题目链接:https://www.luogu.com.cn/problem/P1029

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

  1. P,Q 是正整数。

  2. 要求 P, Q 以x 为最大公约数,以 y 为最小公倍数。

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

输入格式

一行两个正整数 x, y。

输出格式

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

样例 #1

样例输入 #1

3 60

样例输出 #1

4

提示

P,Q 有 4 种:

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

对于 100% 的数据,2<=x,y<=10^5.

【题目来源】

NOIP 2001 普及组第二题

思路:

我们可以枚举最大公倍数y的所有因子,然后检查每一对因子的最小公倍数是不是x即可。最后算出所有的对数。

这段代码是用来解决题目中要求的问题:找出满足条件的 ( P, Q ) 的个数,使得它们的最大公约数是 ( x ),最小公倍数是 ( y )。

AC代码如下:

#include<iostream>
using namespace std;
int gcd(int x, int y)
{
return y ? gcd(y, x % y) : x;
}
int main()
{
int x, y;
int count = 0;
cin >> x >> y;
for (int k = 1; k <= y / k; k++) {
if (y % k == 0) {
if (gcd(k, y / k * x) == x) count++;
if (k != y / k) {
if (gcd(y / k , k * x) == x) count++;
}
}
}
cout << count;
return 0;
}

代码解析如下:

  1. 函数 gcd(int x, int y)

    • 这是一个递归函数,用来计算两个整数 ( x ) 和 ( y ) 的最大公约数(GCD)。
    • 如果 ( y ) 不为0,则递归地调用自身,传入 ( y ) 和 ( x \mod y )。
    • 当 ( y ) 为0时,返回 ( x ),即此时的 ( x ) 就是最大公约数。
  2. 主函数 main()

    • 首先声明了几个变量:x, y, p, q, count,其中 count 用来统计满足条件的 ( P, Q ) 的个数。
    • 输入读取了两个正整数 ( x ) 和 ( y )。
  3. 循环部分

    • for (int k = 1; k <= y / k; k++):从 ( k = 1 ) 开始,遍历到 ( k ) 小于等于 ( sqrt(y) )。
    • if (y % k == 0):检查 ( k ) 是否是 ( y ) 的因子。
    • 如果是 ( y ) 的因子,说明 ( y ) 可以分解为 (y=k*(y/k))。
    • if (gcd(k, y / k * x) == x) count++if (gcd(y / k, k * x) == x) count++
      • 分别检查 (k,y/k*x)与(y/k,k/x) 这两对是否满足条件。
      • 即检查它们的最大公约数是否等于 ( x )。
  4. 输出部分

    • 输出 count,即满足条件的 ( P, Q ) 的个数。

这段代码利用了数学上的性质,通过分解 ( y ) 的因子来检查每一对 ( P, Q ) 是否满足条件,使用了最大公约数函数 gcd 来验证条件。这种方法相比直接遍历所有可能的 ( P, Q ) 组合更加高效。

示例解析

对于输入 3 60,程序会计算:

  • ( x = 3 ),( y= 60 )。
  • 遍历 ( k ) 从 1 到 ( sqrt(60)):
    • 找到 ( k = 1, 2, 3, 4, 5, 6, 10, 12, 15, 20, 30 ) 是 ( 60 ) 的因子。
    • 对每个 ( k ),检查 ( (k, 60/k 3) ) 和 ( (60/k, k* 3) ) 是否满足条件。
    • 统计满足条件的 ( P, Q ) 的个数。

输出结果为 4,符合示例中的期望结果。

洛谷P1029 [NOIP2001 普及组] 最大公约数和最小公倍数问题的更多相关文章

  1. 洛谷P1049 [NOIP2001 普及组] 装箱问题

    本题就是一个简单的01背包问题   1.因为每个物品只能选一次,而且要使箱子的剩余空间为最小.所以可以确定属性为 MAX 2.由于是从n个物品里面选i个物品 那么就是选出的i个物品的空间总和要尽可能的 ...

  2. 动态规划 洛谷P1048 [NOIP2005 普及组] 采药

    洛谷P1048 [NOIP2005 普及组] 采药 洛谷的一个谱架-的题目,考的是01背包问题,接下来分享一下我的题解代码. AC通过图: 我的代码: 1 //动态规划 洛谷P1048 [NOIP20 ...

  3. 求最长子序列(非连续)的STL方法 - 洛谷P1020 [NOIP1999 普及组] 导弹拦截

    先给出例题:P1020 [NOIP1999 普及组] 导弹拦截 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 大佬题解:P1020 [NOIP1999 普及组] 导弹拦截 - 洛谷 ...

  4. 洛谷 P1045 & [NOIP2003普及组] 麦森数

    题目链接 https://www.luogu.org/problemnew/show/P1045 题目大意 本题目的主要意思就是给定一个p,求2p-1的位数和后500位数. 解题思路 首先看一下数据范 ...

  5. 洛谷 P1025 & [NOIP2001提高组] 数的划分(搜索剪枝)

    题目链接 https://www.luogu.org/problemnew/show/P1025 解题思路 一道简单的dfs题,但是需要剪枝,否则会TLE. 我们用dfs(a,u,num)来表示上一个 ...

  6. 洛谷P1077 [NOIP2012普及组]摆花 [2017年四月计划 动态规划14]

    P1077 摆花 题目描述 小明的花店新开张,为了吸引顾客,他想在花店的门口摆上一排花,共m盆.通过调查顾客的喜好,小明列出了顾客最喜欢的n种花,从1到n标号.为了在门口展出更多种花,规定第i种花不能 ...

  7. 洛谷——P1980 [NOIP2013 普及组] 计数问题

    题目描述 试计算在区间 11 到 nn的所有整数中,数字x(0 ≤ x ≤ 9)x(0≤x≤9)共出现了多少次?例如,在 11到1111中,即在 1,2,3,4,5,6,7,8,9,10,111,2, ...

  8. 洛谷 1067 NOIP2009 普及组 多项式输出

    [题解] 一道简单的模拟题.需要判一些特殊情况:第一项的正号不用输出,x的一次项不用输出指数,系数为0的项不用输出等等,稍微细心一下就好. #include<cstdio> #includ ...

  9. [洛谷P1062/NOIP2006普及组] 数列

    首先题面是这样的: 给定一个正整数 k(3≤k≤15) ,把所有k的方幂及所有有限个互不相等的k的方幂之和构成一个递增的序列,例如,当 k=3 时,这个序列是: 1,3,4,9,10,12,13,- ...

  10. [洛谷P1095]NOIP2007 普及组T3 守望者的逃离

    问题描述 恶魔猎手尤迪安野心勃勃,他背叛了暗夜精灵,率领深藏在海底的娜迦族企图叛变.守望者在与尤迪安的交锋中遭遇了围杀,被困在一个荒芜的大岛上.为了杀死守望者,尤迪安开始对这个荒岛施咒,这座岛很快就会 ...

随机推荐

  1. Docker环境如何配置?使用阿里云OOS一步搞定!

    背景介绍 系统运维管理OOS及扩展程序 系统运维管理OOS(CloudOps Orchestration Service)针对在阿里云ECS实例上部署应用和驱动的复杂性,特别设计了扩展程序,旨在简化用 ...

  2. redis cluaster (redis分布式集群 redis分片集群)

    redis cluaster (redis分布式集群) 高可用: 在搭建集群时,会为每一个分片的主节点,对应一个从节点,实现slaveof的功能,同时当主节点down,实现类似于sentinel的自动 ...

  3. nginx重载流程nginx请求处理流程nginx单进程和多进程

    nginx重载流程 首先nginx会向master进程发送HUP信号[reload命令] master进程校验配置语法是否正确 master进程打开新的监听端口 master进程用心配置启动新的wor ...

  4. 剑指Offer-59.按之字形顺序打印二叉树(C++/Java)

    题目: 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推. 分析: 实际上是二叉树的层次遍历,只不过每一行 ...

  5. Windows SERVER 新建FTP 服务器

    Windows SERVER 新建FTP 服务器 FTP主机上的操作(本机IP为:192.168.137.2): 1.新建一个名为 ftpa 的Windows用户. 2.在D盘新建一个 FtpBook ...

  6. 为什么说 Mybatis 是半自动 ORM 映射工具?它与全自动的区别在哪里?

    Hibernate 属于全自动 ORM 映射工具,使用 Hibernate 查询关联对象或者关联集合对象时,可以根据对象关系模型直接获取,所以它是全自动的.而 Mybatis 在查询关联对象或关联集合 ...

  7. 阿里云OSS图片上传和显示注意点

    1. java.lang.IllegalArgumentException: The object key "/image-业务名称/20230818/20230818-订单号参数-acci ...

  8. python sweetviz_数据分析及解决报告图表中文乱码

    python sweetviz_数据分析 python 做数据分析,传入数据进去,就可以使用python现有的插件,进行数据分析,生成数据分析的报表,可以将复杂的数据,通过图表的形式,清晰将数据展示出 ...

  9. Linux特殊权限之SBIT

    简单点,说话的方式简单点: 用于修饰目录 其他用户x位替换成t 作用:目录属主在该目录下创建的文件只有该属主能删除

  10. Vue3 中的 v-bind 指令:你不知道的那些工作原理

    前言 v-bind指令想必大家都不陌生,并且都知道他支持各种写法,比如<div v-bind:title="title">.<div :title="t ...