洛谷P1029 [NOIP2001 普及组] 最大公约数和最小公倍数问题
[NOIP2001 普及组] 最大公约数和最小公倍数问题
题目描述
洛谷题目链接:https://www.luogu.com.cn/problem/P1029
输入两个正整数 x, y,求出满足下列条件的 P, Q的个数:
P,Q 是正整数。
要求 P, Q 以x 为最大公约数,以 y 为最小公倍数。
试求:满足条件的所有可能的 P, Q 的个数。
输入格式
一行两个正整数 x, y。
输出格式
一行一个数,表示求出满足条件的 P, Q 的个数。
样例 #1
样例输入 #1
3 60
样例输出 #1
4
提示
P,Q 有 4 种:
- 3, 60。
- 15, 12。
- 12, 15。
- 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;
}
代码解析如下:
函数
gcd(int x, int y):- 这是一个递归函数,用来计算两个整数 ( x ) 和 ( y ) 的最大公约数(GCD)。
- 如果 ( y ) 不为0,则递归地调用自身,传入 ( y ) 和 ( x \mod y )。
- 当 ( y ) 为0时,返回 ( x ),即此时的 ( x ) 就是最大公约数。
主函数
main():- 首先声明了几个变量:
x, y, p, q, count,其中count用来统计满足条件的 ( P, Q ) 的个数。 - 输入读取了两个正整数 ( x ) 和 ( y )。
- 首先声明了几个变量:
循环部分:
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 )。
输出部分:
- 输出
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 普及组] 最大公约数和最小公倍数问题的更多相关文章
- 洛谷P1049 [NOIP2001 普及组] 装箱问题
本题就是一个简单的01背包问题 1.因为每个物品只能选一次,而且要使箱子的剩余空间为最小.所以可以确定属性为 MAX 2.由于是从n个物品里面选i个物品 那么就是选出的i个物品的空间总和要尽可能的 ...
- 动态规划 洛谷P1048 [NOIP2005 普及组] 采药
洛谷P1048 [NOIP2005 普及组] 采药 洛谷的一个谱架-的题目,考的是01背包问题,接下来分享一下我的题解代码. AC通过图: 我的代码: 1 //动态规划 洛谷P1048 [NOIP20 ...
- 求最长子序列(非连续)的STL方法 - 洛谷P1020 [NOIP1999 普及组] 导弹拦截
先给出例题:P1020 [NOIP1999 普及组] 导弹拦截 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 大佬题解:P1020 [NOIP1999 普及组] 导弹拦截 - 洛谷 ...
- 洛谷 P1045 & [NOIP2003普及组] 麦森数
题目链接 https://www.luogu.org/problemnew/show/P1045 题目大意 本题目的主要意思就是给定一个p,求2p-1的位数和后500位数. 解题思路 首先看一下数据范 ...
- 洛谷 P1025 & [NOIP2001提高组] 数的划分(搜索剪枝)
题目链接 https://www.luogu.org/problemnew/show/P1025 解题思路 一道简单的dfs题,但是需要剪枝,否则会TLE. 我们用dfs(a,u,num)来表示上一个 ...
- 洛谷P1077 [NOIP2012普及组]摆花 [2017年四月计划 动态规划14]
P1077 摆花 题目描述 小明的花店新开张,为了吸引顾客,他想在花店的门口摆上一排花,共m盆.通过调查顾客的喜好,小明列出了顾客最喜欢的n种花,从1到n标号.为了在门口展出更多种花,规定第i种花不能 ...
- 洛谷——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, ...
- 洛谷 1067 NOIP2009 普及组 多项式输出
[题解] 一道简单的模拟题.需要判一些特殊情况:第一项的正号不用输出,x的一次项不用输出指数,系数为0的项不用输出等等,稍微细心一下就好. #include<cstdio> #includ ...
- [洛谷P1062/NOIP2006普及组] 数列
首先题面是这样的: 给定一个正整数 k(3≤k≤15) ,把所有k的方幂及所有有限个互不相等的k的方幂之和构成一个递增的序列,例如,当 k=3 时,这个序列是: 1,3,4,9,10,12,13,- ...
- [洛谷P1095]NOIP2007 普及组T3 守望者的逃离
问题描述 恶魔猎手尤迪安野心勃勃,他背叛了暗夜精灵,率领深藏在海底的娜迦族企图叛变.守望者在与尤迪安的交锋中遭遇了围杀,被困在一个荒芜的大岛上.为了杀死守望者,尤迪安开始对这个荒岛施咒,这座岛很快就会 ...
随机推荐
- Django路由控制器urls
路由, 是一种映射关系,是把客户端请求的url地址和用户请求的应用程序(这里指django里面的视图进行一对一绑定映射的一种关系). 在django中所有的路由最终都被保存到一个变量 urlpatte ...
- k8s 怎么精准获取deployment关联的pods?
标签获取 我们获取那些pods属于某个deployment时最先想到的可能是通过标签获取,其实这个是不准确的.因为标签并不是唯一的,也就是说不同deployment其实是能有相同标签的. replic ...
- 010. Jenkins安装与插件管理
jenkins安装 要求安装环境: 内存: 1G以上 cpu: 1核以上 1. 环境准备: 10.0.0.65 jenkins 10.0.0.66 gitlab 官方安装文档: https://jen ...
- vuex做购物车功能
先创建一个cart组件 <template> <div> <ListItem></ListItem> </div> </templat ...
- 一文搞懂 ARM 64 系列: 寄存器
ARM 64中包含多种寄存器,下面介绍一些常见的寄存器. 1 通用寄存器 ARM 64包含31个64bit寄存器,记为X0~X30. 每一个通用寄存器,它的低32bit都可以被访问,记为W0~W30. ...
- Vue 3深度探索:自定义渲染器与服务端渲染
title: Vue 3深度探索:自定义渲染器与服务端渲染 date: 2024/6/14 updated: 2024/6/14 author: cmdragon excerpt: 这篇文章介绍了如何 ...
- json 对象属性的输出顺序测试,fastJson 有序,jackson,gson无序(需代码中人工按约定来编码)接口数据签名规则
json 对象属性的输出顺序测试,fastJson 有序,jackson,gson无序(需代码中人工按约定来编码)接口数据签名规则 fastJson会根据对象的字段的首字母来排序.而jackson,g ...
- FreeRTOS简单内核实现7 阻塞链表
0.思考与回答 0.1.思考一 如何处理进入阻塞状态的任务? 为了让 RTOS 支持多优先级,我们创建了多个就绪链表(数组形式),用每一个就绪链表表示一个优先级,对于阻塞状态的任务显然要从就绪链表中移 ...
- 从github下好dirsearch后出现要下载文件依赖错误
pip3 install -r requirements.txt
- Linux下挂载NTFS格式的U盘
NTFS是Windows下的格式,在Linux下是识别不了的,要想在Linux上挂载NTFS格式的U盘需要安装软件以提供支持.软件名为ntfs-3g. 1.下载安装包 https://tuxera.c ...