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

百度之星2021——BD202104 萌新

在这里插入图片描述
输入格式:
本题有多组测试数据。
第一行一个数 T (1 ≤ T ≤ 1000) 表示一共有 T 组数据。对于每一组数据,输入一行两个数 a,b (1 ≤ a,b ≤ 1000000000)。
输出格式:
对每组数据,输出一行两个数分别表示最小与最大的 c,如果不存在满足题意的 c,则输出一行两个 -1。

样例1:

5
2 3
4 6
14 64
114 514
1919 810

样例2:

-1 -1
2 2
2 50
2 400
1109 1109

关键思路:

重点1:

(同余的定义):a mod c = b mod c, 那么a-b是c的倍数,即 c | (a - b)。
分析:
模运算:a mod c 表示 a 除以 c 的余数,可以表示为 a = k * c + r,其中 0 ≤ r < c;
那么有

•	a mod c = r      ⇒       a = k * c + r
•	b mod c = r      ⇒       b = m * c + r

因此,a - b = (k - m) * c,即 a - b 是 c 的倍数。

重点2:

可以通过枚举a-b的因子去寻找最小和最大的 c 。

注意:当a=b的情况,此时a-b=0,因此需要单独处理:

  1. 如果a=b=1,则答案为-1,-1,
  2. 否则答案为2,a

具体C++代码为:

#include<bits/stdc++.h> 
#include <iostream>
#include<algorithm>
#include<map>
#include<vector>
#include<math.h>
#include <string.h>
using namespace std;
using namespace std;int main( )
{int n;cin>>n;while(n--){long long int a,b;cin>>a>>b;long long int cmax=abs(a-b);long long int cmin=0;if(cmax==0&&a>=2)cout<<2<<" "<<a<<endl;else if(cmax>=2){for(int i=2;i*i<=cmax;i++){if(cmax%i==0){cmin=i;break;}}if(cmin==0)cmin=cmax;cout<<cmin<<" "<<cmax<<endl;}else cout<<-1<<" "<<-1<<endl;}return 0;
}

Python代码:

import mathdef main():import sysinput = sys.stdin.read  # 使用更可靠的输入方式data = input().split()idx = 0n = int(data[idx])idx += 1for _ in range(n):a = int(data[idx])b = int(data[idx + 1])idx += 2cmax = abs(a - b)cmin = 0if cmax == 0 and a >= 2:print(2, a)elif cmax >= 2:cmin = 0# 改用 math.sqrt 兼容旧版 Pythonsqrt_cmax = int(math.sqrt(cmax)) + 1for i in range(2, sqrt_cmax):if cmax % i == 0:cmin = ibreakif cmin == 0:cmin = cmaxprint(cmin, cmax)else:print(-1, -1)if __name__ == "__main__":main()

Java代码:

import java.util.Scanner;
import java.lang.Math;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();while (n-- > 0) {long a = scanner.nextLong();long b = scanner.nextLong();long cmax = Math.abs(a - b);long cmin = 0;if (cmax == 0 && a >= 2) {System.out.println("2 " + a);} else if (cmax >= 2) {for (long i = 2; i * i <= cmax; i++) {if (cmax % i == 0) {cmin = i;break;}}if (cmin == 0) {cmin = cmax;}System.out.println(cmin + " " + cmax);} else {System.out.println("-1 -1");}}scanner.close();}
}

相关文章:

  • 计算机行业光辉开始暗淡
  • 半导体设备基本通信标准介绍
  • HTML的初步学习
  • 生产安全与设备管理如何分清界限?如何正确用设备管理系统?
  • GitLab Web 界面创建分支后pathspec ... did not match any file(s)
  • 【求1+11+111+1111+11…11(n个1)的和除以7的余数是多少】2022-5-5
  • 【机器视觉】单目测距——运动结构恢复
  • 屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
  • 【Java】在 Spring Boot 中集成 Spring Security + JWT 实现基于 Token 的身份认证
  • 使用分级同态加密防御梯度泄漏
  • 篇章三 论坛系统——环境搭建
  • Unreal从入门到精通之使用 CheatManager 自定义控制台命令
  • c语言中的hashmap
  • MYSQL备份恢复知识:第十章:xTraBackup备份工具
  • 期末考试复习总结-《从简单的页面开始(上)》
  • YOLO电力物目标检测训练
  • K8S的基本概念
  • Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
  • 计算机系统概述(4)
  • POI设置Excel单元格背景色
  • 网站栏目结构图模板/山东泰安网络推广
  • 江西会昌建设局网站/上海不限关键词优化
  • 长春疫情最新消息详情公布/抖音关键词排名优化软件
  • 保山网站建设优化/百度指数怎么查
  • 常州做网站yongjiaweb/西安企业seo外包服务公司
  • 网站建设定制开发价格/seo优化教程培训