当前位置: 首页 > news >正文

题解:洛谷 P1072 [NOIP 2009 提高组] Hankson 的趣味题

【题目来源】

洛谷:[P1072 NOIP 2009 提高组] Hankson 的趣味题 - 洛谷

【题目描述】

Hanks 博士是 BT(Bio-Tech,生物技术)领域的知名专家,他的儿子名叫 Hankson。现在,刚刚放学回家的 Hankson 正在思考一个有趣的问题。

今天在课堂上,老师讲解了如何求两个正整数 \(c_1\)\(c_2\) 的最大公约数和最小公倍数。现在 Hankson 认为自己已经熟练地掌握了这些知识,他开始思考一个“求公约数”和“求公倍数”之类问题的“逆问题”,这个问题是这样的:已知正整数 \(a_0,a_1,b_0,b_1\),设某未知正整数 \(x\) 满足:

  1. \(x\)\(a_0\) 的最大公约数是 \(a_1\)
  2. \(x\)\(b_0\) 的最小公倍数是 \(b_1\)

Hankson 的“逆问题”就是求出满足条件的正整数 \(x\)。但稍加思索之后,他发现这样的 \(x\) 并不唯一,甚至可能不存在。因此他转而开始考虑如何求解满足条件的 \(x\) 的个数。请你帮助他编程求解这个问题。

【输入】

第一行为一个正整数 \(n\),表示有 \(n\) 组输入数据。接下来的 \(n\) 行每行一组输入数据,为四个正整数 \(a_0,a_1,b_0,b_1\),每两个整数之间用一个空格隔开。输入数据保证 \(a_0\) 能被 \(a_1\) 整除,\(b_1\) 能被 \(b_0\) 整除。

【输出】

\(n\) 行。每组输入数据的输出结果占一行,为一个整数。

对于每组数据:若不存在这样的 \(x\),请输出 \(0\),若存在这样的 \(x\),请输出满足条件的 \(x\) 的个数;

【输入样例】

2 
41 1 96 288 
95 1 37 1776 

【输出样例】

6 
2

【算法标签】

《洛谷 P1072 Hankson的趣味题》 #数学# #枚举# #最大公约数gcd# #NOIP提高组# #2009#

【代码详解】

#include <bits/stdc++.h>
using namespace std;int n;                  // 测试用例数量
int a_0, a_1, b_0, b_1; // 输入参数:a0,a1,b0,b1
int ans;                // 满足条件的x的数量
int x;                  // 临时变量
int y[1000005];         // 存储b0的所有因数
int len;                // 因数的个数// 计算最大公约数
int gcd(int x, int y)
{if (x % y == 0) return y;else return gcd(y, x % y);  // 递归调用,注意参数顺序
}// 因数分解函数:找出x的所有因数
void D(int x)
{memset(y, 0, sizeof(y));  // 每次调用前清空数组len = 0;// 遍历可能的因数for (int i = 1; i * i <= x; i++){if (x % i == 0){y[++len] = i;      // 存储一个因数if (i * i != x)     // 避免存储重复的平方数因数y[++len] = x / i;  // 存储对应的另一个因数}}return;
}int main()
{cin >> n;    while (n--){ans = 0;// 输入参数cin >> a_0 >> a_1 >> b_0 >> b_1;// 分解b0的所有因数D(b_0);// 计算比例系数int k = b_1 / b_0;// 检查每个因数对应的x是否满足条件for (int i = 1; i <= len; i++){x = k * y[i];// 检查两个gcd条件if (gcd(x, a_0) == a_1 && gcd(x, b_0) == y[i]) ans++;}// 输出结果cout << ans << endl;}return 0;
}

【运行结果】

2 
41 1 96 288 
6
95 1 37 1776
2
http://www.jsqmd.com/news/392409/

相关文章:

  • 移动开发领域 Gradle 与 CI_CD 的集成方案
  • 题解:洛谷 P1029 [NOIP 2001 普及组] 最大公约数和最小公倍数问题
  • 俄罗斯方块C++命令行版本 - ace-
  • 题解:洛谷 P3383 【模板】线性筛素数
  • 快速制作 虚拟形象项目 MotionPNGTuber
  • 软件测试一篇通
  • 题解:洛谷 P2822 [NOIP 2016 提高组] 组合数问题
  • 【RL+MCS】基于深度强化学习的能效链路自适应联合功率分配与调制编码方案选择【附MATLAB代码】
  • 学会正确看待自己的工作
  • ISAC波形设计新突破!概率去噪增强的PDISAC兼顾感知与通信双性能【附MATLAB+pyython代码】
  • 题解:洛谷 P1983 [NOIP 2013 普及组] 车站分级
  • 这几天的大模型圈,真的有点“卷”过头了
  • 企业H5站点升级PWA (五)
  • 题解:洛谷 P1017 [NOIP 2000 提高组] 进制转换
  • 企业H5站点升级PWA (六)
  • 企业H5站点升级PWA (七)
  • 企业H5站点升级PWA (四)
  • 题解:洛谷 P3916 图的遍历
  • 【硬盘】个人数据备份的各种方式##37
  • 题解:洛谷 P5318 【深基18.例3】查找文献
  • 题解:洛谷 P4017 最大食物链计数
  • 题解:洛谷 P1113 杂务
  • 别只会用 getData!Watcher 注册源码流程全拆解
  • Java线程解析:5种线程创建方法及应用场景 - 指南
  • 题解:洛谷 P2814 家谱
  • 题解:洛谷 P3879 [TJOI2010] 阅读理解
  • 2024 年 09 月 二级真题(1)--数位之和
  • 2026年龙岩连城长汀红白喜事鼓吹铜管乐队演出推荐:客家非遗与市场化服务的平衡之选 - 小白条111
  • 题解:洛谷 P4305 [JLOI2011] 不重复数字
  • 12:内核ROP与提权技术