【NOIP提高组】Hankson的趣味题

【NOIP提高组】Hankson的趣味题


💐The Begin💐点点关注,收藏不迷路💐

Hanks 博士是BT (Bio-Tech,生物技术) 领域的知名专家,他的儿子名叫Hankson。现在,刚刚放学回家的Hankson 正在思考一个有趣的问题。今天在课堂上,老师讲解了如何求两个正整数c1 和c2 的最大公约数和最小公倍数。现在Hankson 认为自己已经熟练地掌握了这些知识,他开始思考一个“求公约数”和“求公倍数”之类问题的“逆问题”,这个问题是这样的:已知正整数a0,a1,b0,b1,设某未知正整数x 满足:

1、x 和a0 的最大公约数是a1;
2、x 和b0 的最小公倍数是b1。
Hankson 的“逆问题”就是求出满足条件的正整数x。但稍加思索之后,他发现这样的x 并不唯一,甚至可能不存在。因此他转而开始考虑如何求解满足条件的x 的个数。请你帮助他编程求解这个问题。

输入

第一行为一个正整数n,表示有n组输入数据。接下来的n行每行一组输入数据,为四个正整数a0,a1,b0,b1,每两个整数之间用一个空格隔开。输入数据保证a0能被a1整除,b1能被b0整除。

输出

每组输入数据的输出结果占一行,为一个整数。对于每组数据:若不存在这样的 x,请输出0;若存在这样的x,请输出满足条件的x的个数;

样例输入

2
41 1 96 288
95 1 37 1776

样例输出

6
2

提示

「说明」
第一组输入数据,x 可以是9、18、36、72、144、288,共有6个。第二组输入数据,x可以是48、1776,共有2个。
「数据范围」
对于50%的数据,保证有1≤a0,a1,b0,b1≤10000且n≤100。
对于100%的数据,保证有1≤a0,a1,b0,b1≤2,000,000,000且n≤2000。

C++ 代码

#include <iostream>
#include <cmath>// 求两个整数的最大公约数,使用欧几里得算法
int gcd(int a, int b) {// 如果b为0,那么a就是最大公约数,直接返回areturn b == 0? a : gcd(b, a % b);
}int main() {int T;// 用于存储输入数据的组数,从标准输入读取该值std::cin >> T;// 循环处理每组输入数据,每次循环处理一组数据while (T--) {int a0, a1, b0, b1;// 从标准输入读取一组数据,分别表示题目中的a0、a1、b0、b1std::cin >> a0 >> a1 >> b0 >> b1;// 计算中间变量p,p等于a0除以a1,用于后续条件判断int p = a0 / a1;// 计算中间变量q,q等于b1除以b0,用于后续条件判断int q = b1 / b0;int ans = 0;// 遍历b1的所有因子,通过遍历到sqrt(b1)来获取所有因子,因为因子是成对出现的for (int x = 1; x * x <= b1; x++) {if (b1 % x == 0) {// 检查当前因子x是否满足所有条件// 条件1:x能被a1整除if (x % a1 == 0) {// 计算x除以a1的值int tempXDivA1 = x / a1;// 检查x除以a1后与p的最大公约数是否为1if (gcd(tempXDivA1, p) == 1) {// 检查q与b1除以x后的最大公约数是否为1if (gcd(q, b1 / x) == 1) {ans++;}}}// 得到b1的另一个因子y,避免重复计算当x等于y的情况int y = b1 / x;if (x == y) continue;// 检查因子y是否满足所有条件// 条件1:y能被a1整除if (y % a1 == 0) {// 计算y除以a1的值int tempYDivA1 = y / a1;// 检查y除以a1后与p的最大公约数是否为1if (gcd(tempYDivA1, p) == 1) {// 检查q与b1除以y后的最大公约数是否为1if (gcd(q, b1 / y) == 1) {ans++;}}}}}// 输出满足条件的x的个数std::cout << ans << std::endl;}return 0;
}

C语言代码

#include <stdio.h>
#include <math.h>// 求两个整数的最大公约数,使用欧几里得算法
int gcd(int a, int b) {// 如果b为0,那么a就是最大公约数,直接返回areturn b == 0? a : gcd(b, a % b);
}int main() {int T;// 用于存储输入数据的组数,从标准输入读取该值scanf("%d", &T);// 循环处理每组输入数据,每次循环处理一组数据while (T--) {int a0, a1, b0, b1;// 从标准输入读取一组数据,分别表示题目中的a0、a1、b0、b1scanf("%d%d%d%d", &a0, &a1, &b0, &b1);// 计算中间变量p,p等于a0除以a1,用于后续条件判断int p = a0 / a1;// 计算中间变量q,q等于b1除以b0,用于后续条件判断int q = b1 / b0;int ans = 0;// 遍历b1的所有因子,通过遍历到sqrt(b1)来获取所有因子,因为因子是成对出现的for (int x = 1; x * x <= b1; x++) {if (b1 % x == 0) {// 检查当前因子x是否满足所有条件// 条件1:x能被a1整除if (x % a1 == 0) {// 计算x除以a1的值int tempXDivA1 = x / a1;// 检查x除以a1后与p的最大公约数是否为1if (gcd(tempXDivA1, p) == 1) {// 检查q与b1除以x后的最大公约数是否为1if (gcd(q, b1 / x) == 1) {ans++;}}}// 得到b1的另一个因子y,避免重复计算当x等于y的情况int y = b1 / x;if (x == y) continue;// 检查因子y是否满足所有条件// 条件1:y能被a1整除if (y % a1 == 0) {// 计算y除以a1的值int tempYDivA1 = y / a1;// 检查y除以a1后与p的最大公约数是否为1if (gcd(tempYDivA1, p) == 1) {// 检查q与b1除以y后的最大公约数是否为1if (gcd(q, b1 / y) == 1) {ans++;}}}}}// 输出满足条件的x的个数printf("%d\n", ans);}return 0;
}

Java代码

import java.util.Scanner;public class Main {// 求两个整数的最大公约数,使用欧几里得算法public static int gcd(int a, int b) {// 如果b为0,那么a就是最大公约数,直接返回areturn b == 0? a : gcd(b, a % b);}public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int T = scanner.nextInt();// 循环处理每组输入数据,每次循环处理一组数据while (T-- > 0) {int a0 = scanner.nextInt();int a1 = scanner.nextInt();int b0 = scanner.nextInt();int b1 = scanner.nextInt();// 计算中间变量p,p等于a0除以a1,用于后续条件判断int p = a0 / a1;// 计算中间变量q,q等于b1除以b0,用于后续条件判断int q = b1 / b0;int ans = 0;// 遍历b1的所有因子,通过遍历到sqrt(b1)来获取所有因子,因为因子是成对出现的for (int x = 1; x * x <= b1; x++) {if (b1 % x == 0) {// 检查当前因子x是否满足所有条件// 条件1:x能被a1整除if (x % a1 == 0) {// 计算x除以a1的值int tempXDivA1 = x / a1;// 检查x除以a1后与p的最大公约数是否为1if (gcd(tempXDivA1, p) == 1) {// 检查q与b1除以x后的最大公约数是否为1if (gcd(q, b1 / x) == 1) {ans++;}}}// 得到b1的另一个因子y,避免重复计算当x等于y的情况int y = b1 / x;if (x == y) continue;// 检查因子y是否满足所有条件// 条件1:y能被a1整除if (y % a1 == 0) {// 计算y除以a1的值int tempYDivA1 = y / a1;// 检查y除以a1后与p的最大公约数是否为1if (gcd(tempYDivA1, p) == 1) {// 检查q与b1除以y后的最大公约数是否为1if (gcd(q, b1 / y) == 1) {ans++;}}}}}// 输出满足条件的x的个数System.out.println(ans);}scanner.close();}
}

Python代码

# 求两个整数的最大公约数,使用欧几里得算法
def gcd(a, b):# 如果b为0,那么a就是最大公约数,直接返回areturn a if b == 0 else gcd(b, a % b)T = int(input())while T:T -= 1a0, a1, b0, b1 = map(int, input().split())# 计算中间变量p,p等于a0除以a1,用于后续条件判断p = a0 / a1# 计算中间变量q,q等于b1除以b0,用于后续条件判断q = b1 / b0ans = 0# 遍历b1的所有因子,通过遍历到sqrt(b1)来获取所有因子,因为因子是成对出现的for x in range(1, int(b1 ** 0.5) + 1):if b1 % x == 0:# 检查当前因子x是否满足所有条件# 条件1:x能被a1整除if x % a1 == 0:# 计算x除以a1的值tempXDivA1 = x / a1# 检查x除以a1后与p的最大公约数是否为1if gcd(tempXDivA1, p) == 1:# 检查q与b1除以x后的最大公约数是否为1if gcd(q, b1 / x) == 1:ans += 1# 得到b1的另一个因子y,避免重复计算当x等于y的情况y = b1 / xif x == y:continue# 检查因子y是否满足所有条件# 条件1:y能被a1整除if y % a1 == 0:# 计算y除以a1的值tempYDivA1 = y / a1# 检查y除以a1后与p的最大公约数是否为1if gcd(tempYDivA1, p) == 1:# 检查q与b1除以y后的最大公约数是否为1if gcd(q, b1 / y) == 1:ans += 1# 输出满足条件的x的个数print(ans)

在这里插入图片描述


💐The End💐点点关注,收藏不迷路💐

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/463455.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Matlab车牌识别课程设计报告(附源代码)

Matlab车牌识别系统 分院&#xff08;系&#xff09; 信息科学与工程 专业 学生姓名 学号 设计题目 车牌识别系统设计 内容及要求&#xff1a; 车牌定位系统的目的在于正确获取整个图像中车牌的区域&#xff0c; 并识别出车牌号。通过设计实现车牌识别系…

【Unity基础】初识UI Toolkit - 运行时UI

Unity中的UI工具包&#xff08;UI Toolkit&#xff09;不但可以用于创建编辑器UI&#xff0c;同样可以来创建运行时UI。 关于Unity中的UI系统以及使用UI工具包创建编辑器UI可以参见&#xff1a; 1. Unity中的UI系统 2. 初识UI Toolkit - 编辑器UI 本文将通过一个简单示例来…

【重生之我要苦学C语言】深入理解指针4

深入理解指针4 字符指针变量 指针指向字符变量 char ch w; char* p &ch;指针指向字符数组 char arr[10] "abcdef"; char* p arr;printf("%s\n", arr); printf("%s\n", p);结果是一样的 也可以写成&#xff1a; char* p "abc…

Freertos学习日志(1)-基础知识

目录 1.什么是Freertos&#xff1f; 2.为什么要学习RTOS&#xff1f; 3.Freertos多任务处理的原理 1.什么是Freertos&#xff1f; RTOS&#xff0c;即&#xff08;Real Time Operating System 实时操作系统&#xff09;&#xff0c;是一种体积小巧、确定性强的计算机操作系统…

勒索软件通过易受攻击的 Cyber​​Panel 实例攻击网络托管服务器

一个威胁行为者&#xff08;或可能多个&#xff09;使用 PSAUX 和其他勒索软件攻击了大约 22,000 个易受攻击的 Cyber​​Panel 实例以及运行该实例的服务器上的加密文件。 PSAUX 赎金记录&#xff08;来源&#xff1a;LeakIX&#xff09; Cyber​​Panel 漏洞 Cyber​​Pane…

基于vue3和elementPlus的el-tree组件,实现树结构穿梭框,支持数据回显和懒加载

一、功能 功能描述 数据双向穿梭&#xff1a;支持从左侧向右侧转移数据&#xff0c;以及从右侧向左侧转移数据。懒加载支持&#xff1a;支持懒加载数据&#xff0c;适用于大数据量的情况。多种展示形式&#xff1a;右侧列表支持以树形结构或列表形式展示。全选与反选&#xf…

Linux入门-基础指令和权限

1.压缩打包 1.1压缩是什么 压缩是通过特定的算法&#xff0c;使文件减小体积&#xff0c;从而达到节省空间的目的。 1.2.为什么要压缩 a.压缩将文件大小减小&#xff0c;在本地可能不太明显&#xff0c;但是在网络传输中&#xff0c;减小了网络传输的成本。 b.将多个文件压…

WPF中如何解决DataGrid的Header没有多余的一行

将最后一行设置DataGridTemplateColumn Width"*" 使其自适应

Qt/C++地图雷达扫描/动态扇形区域/标记线实时移动/轮船货轮动态轨迹/雷达模拟/跟随地图缩放

一、前言说明 地图雷达扫描的需求场景也不少&#xff0c;很多人的做法是直接搞个覆盖层widget&#xff0c;在widget上绘制雷达&#xff0c;优缺点很明显&#xff0c;优点是性能高&#xff0c;毕竟直接在widget上绘制性能明显比js中绘制要高&#xff0c;缺点是要么动态计算经纬…

Java | Leetcode Java题解之第528题按权重随机选择

题目&#xff1a; 题解&#xff1a; class Solution {int[] pre;int total;public Solution(int[] w) {pre new int[w.length];pre[0] w[0];for (int i 1; i < w.length; i) {pre[i] pre[i - 1] w[i];}total Arrays.stream(w).sum();}public int pickIndex() {int x …

uni-app自定义弹窗

1、项目根目录components目录下创建/modal/modal.vue文件 2、modal.vue文件内容 vue2版本&#xff1a; <template><view class"modal-container"><view class"bg" tap"maskClose"></view><view class"box&quo…

Python小游戏20——超级玛丽

首先&#xff0c;你需要确保你的Python环境中安装了pygame库。如果还没有安装&#xff0c;可以使用以下命令进行安装&#xff1a; bash pip install pygame 运行效果展示 代码展示 python import pygame import sys # 初始化pygame pygame.init() # 设置屏幕尺寸 screen_width …

木马病毒相关知识

1、 木马的定义 相当于一个远控程序&#xff08;一个控制端[hack]、一个被控端[受害端]&#xff09; 在计算机系统中&#xff0c;“特洛伊木马”指系统中被植入的、人为设计的程序&#xff0c;目的包括通过网终远程控制其他用户的计算机系统&#xff0c;窃取信息资料&#xff0…

Apache POI(java操作Miscrosoft Office)

Apache POI 1.1 介绍 Apache POI 是一个处理Miscrosoft Office各种文件格式的开源项目。简单来说就是&#xff0c;我们可以使用 POI 在 Java 程序中对Miscrosoft Office各种文件进行读写操作。 一般情况下&#xff0c;POI 都是用于操作 Excel 文件。 Apache POI 的应用场景&a…

【Docker】安装registry本地镜像库,开启Https功能

下载镜像 docker pull registry:2 需要启动https功能&#xff0c;就要生成服务端的自签名的证书和私钥&#xff0c;以及在docker客户端安装这个经过签名的证书。 第一步&#xff1a;生成公私钥信息&#xff0c;第二步&#xff0c;制作证书签名申请文件&#xff0c; 第三步&…

Python generator 生成杨辉三角

一、题目描述 先看来自于 廖雪峰老师的一道 Python 练习题 杨辉三角定义如下&#xff1a; 1/ \1 1/ \ / \1 2 1/ \ / \ / \1 3 3 1/ \ / \ / \ / \1 4 6 4 1/ \ / \ / \ / \ / \ 1 5 10 10 5 1把每一行看做一个list&#xff0c;试写一个generato…

【06】A-Maven项目SVN设置忽略文件

做Web项目开发时&#xff0c;运用的是Maven管理工具对项目进行管理&#xff0c;在项目构建的过程中自动生成了很多不需要SVN进行管理的文件&#xff0c;SVN在对源码进行版本管理时&#xff0c;需要将其忽略&#xff0c;本文给出了具体解决方案。 SVN设置忽略Maven项目中自动生成…

AVL树的插入和删除分析(图解和代码)

文章目录 1. AVL树1.1 AVL树的概念1.2 AVL树节点的定义1.3AVL树的插入1.4 AVL树的删除查找要删除的节点判断要删除节点的类型从下往上调节平衡因子真正删除节点整体代码 1.5 AVL树的性能分析 1. AVL树 1.1 AVL树的概念 二叉搜索树虽然能够缩短查找的效率,但是如果数据有序或者…

MySQL-基础汇总

MySQL-基础汇总 数据库对于任何一个从事后台开发的人说都是永远躲不掉的&#xff0c;任何系统或程序离开了数据的支持都变的毫无意义。而管理数据的工具——数据库就显得尤为重要。本章节我们的核心就是 MySQL&#xff0c;相信很多小伙伴跟我一样&#xff0c;也沉浸在增、删、…

一条sql语句是怎么执行的?

一、问题 InnoDB存储引擎&#xff0c;执行了下列语句&#xff1a; UPDATE user SET name "小明" WHERE id1002; 其中id是主键&#xff0c;这条SQL语句的执行过程是怎样的&#xff1f; 二、答案 首先客户端与MySQL连接器进行连接&#xff0c;然后分析器经过词法…