ZT39 小红的取模构造

server/2025/3/9 18:02:35/

描述

小红拿到了两个整数 a 和 b 。她希望你构造两个正整数 x 和 y 满足:
1、x mod y=a
2、y mod x=b
其中 p mod q 代表 p 除以 q 得到的余数。

共有t组询问。

输入描述:

第一行输入一个正整数t,代表询问的次数。
接下来的t行,每行输入两个整数a和b,代表一次询问。
1≤t≤10000
0≤a,b≤10^9

输出描述:

输出t行,每行输出两个正整数(不能大于2^31−1),代表询问的答案。有多解时输出任意即可。
如果无解,请输出"-1 -1"。

示例1

输入:

2
2 3
0 0

输出:

5 3
1 1
一、问题分析

首先读题,仔细看描述中的内容,发现需求是

1.有t组正整数

2.每组正整数包含两个正整数a和b

3.求问满足每组正整数a和b的x和y

4.x、y满足:

(1)x mod y = a

(2)y mod x = b

二、解题思路

1.x mod y = a的意思是x除以y得z余a

x / y = z

y * z + a = x

y mod x = b

y / x = w

w * x + b = y

yz + wx + a + b = x + y

a + b = x + y - yz - wx

a + b = x(1-w) + y(1-z)

a + b = x(1-y/x)+y(1-x/y)

2. 假设a是5,如果希望x%y=5

最简单的方式就是让x比y大5,且y不能等于0

比如y=1,x=6,x%y = 6%1 = 5

假设b是7,希望y%x = 7

1 % 6 = 1,如果一个较小的数对一个较大得数求余,那么会等于自身

所以我们可以让y = 7,x=7+6-1=12

这样的话x%y=12%7=5=a

y%x=7%12=7=b

3.所以我们先让y=1,然后x=a+y=a+1,这样的话x%y=a+1%1=a

然后y=1+b-1=b,然后x=a+1-1+b这样的话y%x=b%a+b=b

a+b%b=a

4.如果a为0的时候呢

x%y=0证明x等于y或者x是y得倍数

假设a为0b为1

如果y%x=1那么y=x+b=x+b或者y=b=1,x大于y,因为需要x是y的倍数,所以x刚好可以等于2

y=1,x=2

1%2=1

2%1=0

所以如果某一个a是0得时候,x是y得2倍,y则等于b,x则等于2b

但是这是b不为0得情况

5.如果b等于0呢,这样的情况a和b需要相等,但是又不能等于0,我们可以将他们设置成1

6.假设a为12

b为4

这个时候,如果按照原来的想法,a!=0,b!=0将x设置为a+b=16将y设置为b=4

会有问题,因为a+b%b得到的值不是a12而是0,为什么呢,因为a是b得倍数,

当a大于b的时候可以这样,将x设置为a,y设置为a+b

这样的话x就是4,y是16

x%y=12%16=12

y%x=16%12=4

7.如果a=b的时候呢?如果a或者b不为0的话,(就是都是0)

没有解,返回-1就可以了

三、具体步骤

使用的语言是C

#include <stdint.h>
#include <stdio.h>int main() {int t;if (scanf("%d", &t) != EOF) {for(int i = 0; i < t; i++) {int a, b;if(scanf("%d%d", &a, &b) != EOF) {int x, y;// printf("a:%d b:%d\n", a, b);if(a == 0 && b == 0) {x = 1;y = 1;} else if(a == 0) {x = 2 * b;y = b;} else if(b == 0) {y = 2 * a;x = a;} else if(a > b){x = a;y = a + b;} else if(b > a){x = a + b;y = b;} else if(a == b){x = -1;y = -1;}//printf("x mod y: %d\n", x % y);//printf("y mod x: %d\n", y % x);printf("%d %d\n", x, y);} else printf("error1\n");}} else printf("error\n");return 0;
}


http://www.ppmy.cn/server/173724.html

相关文章

IPD(集成产品开发)简介

参考&#xff1a;IPD咨询_研发管理咨询_IPD集成产品开发-百思特管理咨询集团 一、什么是IPD IPD到底是什么&#xff1f;一套体系&#xff1f;一些流程&#xff1f;还是一种模式&#xff1f; 华为在整个企业内部改革中最重要的两个项目一个是ISC(集成供应链)&#xff0c;另外…

计算机毕业设计SpringBoot+Vue.js车辆管理系统(源码+文档+PPT+讲解)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

爬虫代理技术深度解析:从原理到实战应用

一、代理IP的核心价值 ‌突破访问限制‌ 通过代理IP轮换机制&#xff0c;可有效绕过目标网站的IP频率限制与地域访问控制‌。实测数据显示&#xff0c;使用代理IP的爬虫成功率比直接访问提升3-5倍‌。 ‌提升数据采集效率‌ 采用分布式代理池技术&#xff0c;可实现每秒处理20…

网络编程-----服务器(多路复用IO 和 TCP并发模型)

一、单循环服务器模型 1. 核心特征 while(1){newfd accept();recv();close(newfd);}2. 典型应用场景 HTTP短连接服务&#xff08;早期Apache&#xff09;CGI快速处理简单测试服务器 3. 综合代码 #include <stdio.h> #include <sys/types.h> /* See NO…

深入理解人脸特征向量及图片转换方法与开发架构

在当今数字化时代&#xff0c;人脸识别技术已经广泛应用于各个领域&#xff0c;如安防监控、门禁系统、手机解锁等。而人脸特征向量作为人脸识别技术的核心概念&#xff0c;对于理解和实现人脸识别起着至关重要的作用。本文将详细介绍人脸特征向量是什么&#xff0c;以及如何将…

MoonSharp 文档一

目录 1.Getting Started 步骤1&#xff1a;在 IDE 中引入 MoonSharp 步骤2&#xff1a;引入命名空间 步骤3&#xff1a;调用脚本 步骤4&#xff1a;运行代码 2.Keeping a Script around 步骤1&#xff1a;复现前教程所有操作 步骤2&#xff1a;改为创建Script对象 步骤…

将长上下文大语言模型研究从输入转向输出

将长上下文大语言模型研究从输入转向输出 摘要: 近年来&#xff0c;长上下文大语言模型&#xff08;LLMs&#xff09;的研发主要集中在处理更长的输入文本上&#xff0c;这使得模型在理解长篇内容时取得了显著进步。然而&#xff0c;生成长篇输出的研究却相对被忽视&#xff…

集合论--形式化语言里的汇编码

如果一阶逻辑是数学这门形式化语言里的机器码&#xff0c;那么集合论就是数学这门形式化语言里的汇编码。 基本思想&#xff1a;从集合出发构建所有其它。 构建自然数构建整数构建有理数构建实数构建有序对、笛卡尔积、关系、函数、序列等构建确定有限自动机(DFA) 全景图 常…