P8814 [CSP-J 2022] 解密 题解(二元一次方程)

2023-05-16

[CSP-J 2022] 解密

题目描述

给定一个正整数 k k k,有 k k k 次询问,每次给定三个正整数 n i , e i , d i n_i, e_i, d_i ni,ei,di,求两个正整数 p i , q i p_i, q_i pi,qi,使 n i = p i × q i n_i = p_i \times q_i ni=pi×qi e i × d i = ( p i − 1 ) ( q i − 1 ) + 1 e_i \times d_i = (p_i - 1)(q_i - 1) + 1 ei×di=(pi1)(qi1)+1

输入格式

第一行一个正整数 k k k,表示有 k k k 次询问。

接下来 k k k 行,第 i i i 行三个正整数 n i , d i , e i n_i, d_i, e_i ni,di,ei

输出格式

输出 k k k 行,每行两个正整数 p i , q i p_i, q_i pi,qi 表示答案。

为使输出统一,你应当保证 p i ≤ q i p_i \leq q_i piqi

如果无解,请输出 NO

样例 #1

样例输入 #1

10
770 77 5
633 1 211
545 1 499
683 3 227
858 3 257
723 37 13
572 26 11
867 17 17
829 3 263
528 4 109

样例输出 #1

2 385
NO
NO
NO
11 78
3 241
2 286
NO
NO
6 88

提示

【样例 #2】

见附件中的 decode/decode2.indecode/decode2.ans

【样例 #3】

见附件中的 decode/decode3.indecode/decode3.ans

【样例 #4】

见附件中的 decode/decode4.indecode/decode4.ans

【数据范围】

以下记 m = n − e × d + 2 m = n - e \times d + 2 m=ne×d+2

保证对于 100 % 100\% 100% 的数据, 1 ≤ k ≤ 10 5 1 \leq k \leq {10}^5 1k105,对于任意的 1 ≤ i ≤ k 1 \leq i \leq k 1ik 1 ≤ n i ≤ 10 18 1 \leq n_i \leq {10}^{18} 1ni1018 1 ≤ e i × d i ≤ 10 18 1 \leq e_i \times d_i \leq {10}^{18} 1ei×di1018
1 ≤ m ≤ 10 9 1 \leq m \leq {10}^9 1m109

测试点编号 k ≤ k \leq k n ≤ n \leq n m ≤ m \leq m特殊性质
1 1 1 1 0 3 10^3 103 1 0 3 10^3 103 1 0 3 10^3 103保证有解
2 2 2 1 0 3 10^3 103 1 0 3 10^3 103 1 0 3 10^3 103
3 3 3 1 0 3 10^3 103 1 0 9 10^9 109 6 × 1 0 4 6\times 10^4 6×104保证有解
4 4 4 1 0 3 10^3 103 1 0 9 10^9 109 6 × 1 0 4 6\times 10^4 6×104
5 5 5 1 0 3 10^3 103 1 0 9 10^9 109 1 0 9 10^9 109保证有解
6 6 6 1 0 3 10^3 103 1 0 9 10^9 109 1 0 9 10^9 109
7 7 7 1 0 5 10^5 105 1 0 18 10^{18} 1018 1 0 9 10^9 109保证若有解则 p = q p=q p=q
8 8 8 1 0 5 10^5 105 1 0 18 10^{18} 1018 1 0 9 10^9 109保证有解
9 9 9 1 0 5 10^5 105 1 0 18 10^{18} 1018 1 0 9 10^9 109
10 10 10 1 0 5 10^5 105 1 0 18 10^{18} 1018 1 0 9 10^9 109

想看暴力70分代码的可以看我上一篇博客(哭)

解题思路如下

题目给出条件如下:
n = q ∗ p n=q*p n=qp
e ∗ d = ( q − 1 ) ∗ ( p − 1 ) + 1 e*d=(q-1)*(p-1)+1 ed=(q1)(p1)+1
可以化简如下
e ∗ d = q ∗ p − q − p + 2 e*d=q*p-q-p+2 ed=qpqp+2
则可以得到
1. p + q = n + 2 − e ∗ d p+q = n+2-e*d p+q=n+2ed
2. q ∗ p = n q*p=n qp=n

根据完全平方公式

  1. ( a + b ) 2 = a 2 + 2 a b + b 2 (a+b)^2 = a^2 +2ab+ b^2 (a+b)2=a2+2ab+b2
  2. ( a − b ) 2 = a 2 − 2 a b + b 2 (a-b)^2 = a^2 -2ab+b^2 (ab)2=a22ab+b2


( p − q ) 2 = ( a + b ) 2 − 4 a b (p-q)^2=(a+b)^2 -4ab (pq)2=(a+b)24ab

现在 p + q p+q p+q p − q p-q pq都知道了,就可以求出p和q
p = n + 2 − e ∗ d + ( a + b ) 2 − 4 a b 2 p=\frac{n+2-e*d +\sqrt{(a+b)^2 -4ab}}{2} p=2n+2ed+(a+b)24ab
p = n + 2 − e ∗ d ( a + b ) 2 − 4 a b 2 p=\frac{n+2-e*d \sqrt{(a+b)^2 -4ab}}{2} p=2n+2ed(a+b)24ab
但是其实q也可以如下:
q = n / p q=n/p q=n/p
然后判断一下n能不能被q整除即可。
代码如下

#include<iostream>
#include<cmath> 

using namespace std;

int main() {
	int k;
	cin >> k;

	while (k--) {
		long long p = 0, q = 0;
		long long  n = 0, e = 0, d = 0;

		cin >> n >> e >> d;

		long long total = n + 2 - e * d;


		int flag = 0;
		
		p = total + sqrt((total * total - 4 * n));
		p /= 2;

		if (n % p == 0) {//原作者这里再次判断p*q==n和e*d==(p-1)(q-1)+1,但是我认为再求pq的时候已经利用这两个条件,所以pq必然满足这俩条件,只需要判断n能否被p整除即可。
			q = n / p;
			
				flag = 1;

		}
		if (flag == 0)
			cout << "NO" << endl;
		else
		{//因为
			//$p=\frac{n+2-e*d +\sqrt{(a+b)^2 -4ab}}{2}$
//$p=\frac{n+2-e*d \sqrt{(a+b)^2 -4ab}}{2}$
//所以p一定大于q
			cout << p << " " << q << endl;
		}
	}
}

在这里插入图片描述

感谢原作者SkyWave
原文链接如下 https://www.luogu.com.cn/problem/solution/P8814

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

P8814 [CSP-J 2022] 解密 题解(二元一次方程) 的相关文章

  • Week8 CSP-M2

    T1 HRZ的序列 题目 相较于咕咕东 xff0c 瑞神是个起早贪黑的好孩子 xff0c 今天早上瑞神起得很早 xff0c 刷B站时看到了一个序列aa xff0c 他对这个序列产生了浓厚的兴趣 他好奇是否存在一个数KK xff0c 使得一些
  • Windows Server 2022 安装Intel I219V 服务器网卡

    随着Windows Server 2022发布 xff0c 目前我正对公司内的电脑新系统更新 在向一台主板是华硕B150M Plus的电脑时 xff0c 网卡识别不出 这正是Intel I219V 服务器版网卡 从Intel 官网下载了最新
  • csp认证考试准备Day-1

    今天 xff0c 开启了我的第一个专栏 xff0c 用来记录我的2023年3月的csp认证考试 语言 xff1a c 43 43 本人状况 xff1a 半学期几乎没敲过代码 xff0c 学过c 43 43 和数据结构 xff0c csp第一
  • 2022.10.30

    新愁复旧愁 xff0c 苦痛哀伤恨
  • 2022-6-12:OpenCV入门(十一)feature2d组件——角点检测

    Harris角点检测 如果某一点在任意方向的一个微小变动都会引起灰度很大的变化 xff0c 那么我们就把它称之为角点 角点作为图像上的特征点 xff0c 包含有重要的信息 xff0c 在图像融合和目标跟踪及三维重建中有重要的应用价值 它们在
  • 2022同济825自控原理

    1 求 R L C RLC R L C 电路的传递函数 2 求 M a s
  • 2022年vue高频面试题分享(附答案分析)

    本篇文章给大家总结一些值得收藏的2022年精选vue高频面试题 xff08 附答案 xff09 有一定的参考价值 xff0c 有需要的朋友可以参考一下 xff0c 希望对大家有所帮助 Vue router 导航守卫有哪些 全局前置 钩子 x
  • JS中函数与作用域的定义(日志-2022.3.28)

    1 函数中的两种命名方式 xff1a 1 利用函数关键字function自定义函数 xff08 命名函数 xff09 function fu xff08 xff09 fn 2 利用函数表达式 xff08 匿名函数 xff09 var 变量名
  • 2022最后一天盘点

    今天是今年最后的一天工作日 xff0c 对于我来说就是今年的最后一天 xff0c 因为放假了我就不需要思考了 xff08 当然公司后端程序员要保持24小时oncall xff09 1 阳完之后 还是有些 咳嗽 xff0c 公司此起彼伏的咳嗽
  • 飞控学习常见典型问题集Q&A——无名创新(2022年4月15日)

    飞控学习常见典型问题集Q amp A 无名创新 xff08 2022年4月15日 xff09 1 第一次启动FS I6遥控器 xff0c 进入不了界面一直嘟嘟 xff0c 请问这是什么情况呢 xff1f 先把上面的英文翻译一下 xff0c
  • 2022数学建模国赛B题和C题高质量论文代码数据

    目录 B题论文 5 1 问题一的建模与求解 5 1 1 使用极坐标求解具体位置 C题论文 1 1 研究背景 1 2 问题的提 5 1 问题一的建模与求解 5 1 1 数据的预处理 B题论文 5 1 问题一的建模与求解 5 1 1 使用极坐标
  • CSP-S 模拟53 题解

    题解 xff1a T1 u xff1a 一看到修改这么多 xff0c 但询问其实只有一个不难想到差分 xff0c 但是他这个形状可以说很不规则 xff0c 于是我们想到分别维护竖着的和斜着的差分 xff0c 然后最后合并即可 考场上瞎调了一
  • 2022-11-15日Linux安装csitools问题及解决办法

    问题一 xff1a 执行完这三步后电脑没有wifi图标了 xff0c 不能联网了 sudo modprobe r iwldvm iwlwifi mac80211 sudo modprobe r iwlwifi mac80211 cfg802
  • CCF/CSP 201312-1出现次数最多的数(满分题解Java版)

    CCF 考试 一定要刷历年真题 在提交代码的时候 一定不要把中文注释提交上去了 可能会编译报错 题目描述 201312 1出现次数最多的数 Java题解 import java util ArrayList import java util
  • 数据结构--二叉树

    前言 关于二叉树知识的考察主要分两部分 第一部分在初赛中体现 一般考察二叉树的节点个数 树高和遍历问题 1 二叉树定义 在计算机科学中 二叉树是每个结点最多有两个子树的树结构 通常子树被称作 左子树 left subtree 和 右子树 r
  • C++语言基础--递归函数

    对于很多编程初学者来说 递归算法是学习语言的最大障碍之一 可能也有一大部分人知道递归 也能看的懂递归 但在实际做题过程中 却不知道怎么使用 递归的定义 1 很官方的说法 递归 在数学与计算机科学中 是指在函数的定义中使用函数自身的方法 也就
  • getBoundingClientRect offsetWidth offsetHeight

    对于一个旋转的dom元素 getBoundingClientRect 得到的width height是外接矩形的宽高 offsetWidth offsetHeight是未旋转前dom的宽高
  • CCF/CSP 201409-3 字符串匹配(满分题解Java版)

    此题虽然放在了第三题 但是如果对Java的API了解的比较好的同学 解这道题一点都不难 比前几题都要简单一些 题目描述 官方题目地址 读题请点击 Java满分题解 import java util Scanner next 与 nextLi
  • CSP-J (NOIP普及组) 历年复赛真题考察内容(1998~2021)

    TZOJ题目分类 本博客原文地址 https www cnblogs com BobHuang p 14522022 html 其中 1 较简单题26题左右 2 动态规划17题 其中9题较好做 3 模拟 阅读题目将问题抽象建模写出程序 为1
  • 数据结构--二叉堆与优先队列

    堆的一些性质 1 堆是一颗完全二叉树 2 堆的顶端一定是 最大 最小 的 但是要注意一个点 这里的大和小并不是传统意义下的大和小 它是相对于优先级而言的 3 堆一般有两种样子 小根堆和大根堆 分别对应第二个性质中的 堆顶最大 堆顶最小 对于

随机推荐

  • 修复win10启动项

    使用bcdboot修复win10启动项 修复前计算机状态 xff1a 只有win10系统分区 xff0c 没有EFI分区 步骤 xff1a 1 使用DiskGenius创建一个100MB的EFI分区 2 关闭计算机 xff0c 插入系统盘
  • 阿里云主机ubuntu20配置VNC出现的各种问题

    ubuntu可直接拉取安装的VNC软件有如 TightVNC xff0c TigerVNC 和 x11vnc 等 一 安装x11vnc出现的问题 安装x11vnc后发现从外网连接不到x11vnc的5900端口 xff0c 在x11vnc正常
  • 3-5 Linux 配置 yum 源

    1 输入 yum list 查看安装包时 xff0c 出现以下错误 yum 源 xff1a 指定服务器 span class token punctuation span root 64 localhost span class token
  • 针对静默数据错误,如何采用DIX和DIF保证数据一致性?

    静默数据破坏问题是一直存在存储系统中最难解决的数据一致性问题之一 xff0c 无论是传统多控 分布式存储 xff0c 还是公有云存储 对存储系统设计和开发人员来讲 xff0c 数据一致性问题解决能否解决决定着存储系统是否可以商用 到这个问题
  • ModuleNotFoundError: No module named '_ssl'解决方法

    span class token punctuation span root 64 bhs Modules span class token punctuation span span class token comment pwd spa
  • 【Java工具类】Java8之Lambda表达式

    大千世界 xff0c 茫茫人海 xff0c 相识就是一种缘分 若此篇文章对您有帮助 xff0c 点个赞或点个关注呗 xff01 一 Lambda简述 1 1 Lambda概述 Lambda 表达式可以理解为简洁地表示可传递的匿名函数的一种方
  • Ubuntu20.04中安装pycharm社区版本

    Ubuntu20 04中安装pycharm社区版本 目前pycharm的社区版是免费的 xff0c 如果只用python xff0c 社区版能满足要求 下载地址https www jetbrains com zh cn pycharm do
  • android studio 报错:The plugin org.jetbrains.android failed to save settings and has been disabled.

    今天刚打开android studio时候突然出现了一个错误 xff1a The plugin org jetbrains android failed to save settings and has been disabled Plea
  • CMS 02 前端开发

    1 xff0c vue js 研究 1 1 vue js 介绍 1 vue js 是什么 xff1f vue是一套用于构建用户界面的渐进式框架 vue 被设计为可以自底向上逐层应用 0 渐进式框架 xff1a Progressive 说明v
  • 2.从键盘输入两个正整数,输出这两个整数的商,要求商的小数点后保留5位。例如输入355和113,输出3.14159。

    题目 xff1a 从键盘输入两个正整数 xff0c 输出这两个整数的商 xff0c 要求商的小数点后保留5位 例如输入355和113 xff0c 输出3 14159 程序 xff1a include lt stdio h gt void m
  • 你需要烂熟于心的15个常用JS函数

    今天分享一下我日常工作中常用的15个JS函数 xff0c 希望对于你的日常开发有帮助 xff1a 当前浏览器名称 function getExplorer const ua 61 window navigator userAgent con
  • linux 安装yum 安装php

    安装yum sudo apt get update apt get install lrzsz apt install yum apt get install php7 0 libapache2 mod php7 0
  • linux 命令行美化

    vim etc bashrc 添加下面的代码 PS1 PS1 61 34 033 38 5 87m u tput bold tput sgr0 033 38 5 15m 64 tput sgr0 tput sgr0 033 38 5 119
  • Ubuntu18.0下编译opencv c++并配置clion环境

    预编译阶段 先安装一些依赖 span class token function sudo span span class token function apt get span span class token function insta
  • 谈谈CMDB,ITIL和ITSM概念和简史

    CMDB即配置管理数据库 xff0c 存储与管理企业IT架构中设备的各种配置信息 xff0c 它与所有服务支持和服务交付流程都紧密相联 xff0c 支持这些流程的运转 发挥配置信息的价值 xff0c 同时依赖于相关流程保证数据的准确性 如果
  • Java快排实现

    快速排序 xff1a 基本实现思路 取一个标准位置的数字 用其他位置的数字和标准数进行对比 如果比标准数大 则放到标准数的右边 xff0c 如果比标准数小 则放到标准数的左边 然后使用递归进行持续比对 xff08 注意 递归要有入口 如果当
  • Java 后端项目部署到服务器使用ip访问

    Java 后端项目部署到服务器使用ip访问 一 Maven打包项目 打包成功 xff0c 该路径下会生成一个jar包 二 部署项目 打开服务器 创建文件夹目录用于存放上传的jar包并且进入该文件夹 使用rz命令上传打好的jar包 上传完成
  • 中缀表达式转逆波兰表达式

    中缀表达式转后缀表达式 逆波兰表达式 op 43 icp06421isp01536 思路 假设表达式为string ex 61 34 a 43 b c d 34 将表达式处理为 34 a 43 b c d 34 以 做末尾标识 初始时 栈s
  • vs2022 安装boost库并导入websocketpp示例

    vs2022 安装boost库并导入websocketpp示例 下载并编译boost 因为websocketpp依赖于boost中的asio库 xff0c 所以需要先安装boost库 步骤如下 xff1a 下载源码 boost官网 点击版本
  • P8814 [CSP-J 2022] 解密 题解(二元一次方程)

    CSP J 2022 解密 题目描述 给定一个正整数 k k k xff0c 有 k k k 次询问 xff0c 每次给定三个正整数