首页 > 其他分享 >P8814 [CSP-J 2022] 解密 题解

P8814 [CSP-J 2022] 解密 题解

时间:2024-10-23 11:58:51浏览次数:1  
标签:P8814 pq 2ab 题解 sqrt 4n long ed CSP

解方程

$题目中说,n = pq,ed = (p-1)(q-1)+1,m=n-ed+2.$

$把ed的式子展开,得到:$

$ed = p(q-1)-(q-1)+1$

$ed=pq-p-q+2$

$再把展开后的式子带入m中,得:$

$m=n-(pq-p-q+2)+2.$

$m=n-pq+p+q-2+2$

$\because n=pq$

$\therefore m=pq-pq+p+q-2+2$

$m=p+q.$

$如果想要求出p和q的值,那么可以再构造出一个二元一次方程,然后构成$

$一个二元一次方$

$所以,最简单的方法就是求出p-q的值$

p - q = ?

$回想起完全平方公式$

$(a-b)2=a2+2ab+b^2$

$(a+b)2=a2-2ab+b^2$

$(a+b)2-(a-b)2=2ab+2ab=4ab$

$刚好,如果p=a,q=b呢?$

$(p-q)2=(p+q)2-4pq$

$左右开方$

$p-q=\sqrt {(p+q)^2-4pq}.$

$\because p+q=m=n-ed+2,n=pq$

$\therefore p-q=\sqrt{(n-ed+2)^2-4n}$

方程组

$\left{\begin{matrix}
p+q=n-ed+2&\
p-q=\sqrt{(n-ed+2)^2-4n} &
\end{matrix}\right.$

$输入n,e,d三个数后,就可以求出p-q和p+q的值了.$

$然后用加减消元法.$

$两式相加,得:$

$p=\frac {(n-ed+2+\sqrt{(n-ed+2)^2-4n})} {2}$

$两式相减,得:$

$q=\frac {(n-ed+2-\sqrt{(n-ed+2)^2-4n})} {2}$

判断是否是正解

$前2个条件直接套就行,也就是pq=n,ed=(p-1)(q-1)+1.$

$因为在开根的时候,可能会产生一些不是正解的数,所以只要判断p,q是否$

$为真即可.$

代码

#include<bits/stdc++.h>
using namespace std;
int k;
int main() {
//	freopen("decode.in", "r", stdin);
//	freopen("decode.out", "w", stdout);
	scanf("%d", &k);
	while (k--) {
		long long n, d, e;
		scanf("%lld%lld%lld", &n, &d, &e);
		// 接下来就是套公式 
		long long p = (n - e * d + 2 + sqrt((n - e * d + 2) * (n - e * d + 2) - 4 * n)) / 2;
		long long q = (n - e * d + 2 - sqrt((n - e * d + 2) * (n - e * d + 2) - 4 * n)) / 2;
		// 判断这2个解是否成立 
		if (p * q == n && e * d == (p - 1)  * (q - 1) + 1&& p && q) {
			if (p > q) swap(p, q); // 小的数在前面 
			printf("%lld %lld\n", p, q);
		}
		else
			printf("NO\n");
	}
	return 0;
}

知识点

$完全平方公式,方程$

标签:P8814,pq,2ab,题解,sqrt,4n,long,ed,CSP
From: https://www.cnblogs.com/panda-lyl/p/18496098

相关文章

  • P8815 [CSP-J 2022] 逻辑表达式 题解
    短路我们可以使用一个变量来记录当前有没有短路.设变量短路为$dl$.当$dl$为$0$时,说明当前值为$0$,且运算符为&.当$dl$为$1$时,说明当前值为$1$,且运算符为|.代码重点讲完了,细节可以看代码以及注释.#include<iostream>#include<cstdio>#include<cstring>using......
  • Day12 备战CCF-CSP练习
    Day12题目描述西西艾弗岛上共有\(n\)个仓库,依次编号为\(1∼n\)。每个仓库均有一个\(m\)维向量的位置编码,用来表示仓库间的物流运转关系。具体来说,每个仓库\(i\)均可能有一个上级仓库\(j\),满足:仓库\(j\)位置编码的每一维均大于仓库\(i\)位置编码的对应元素。比如......
  • 最佳序列 题解
    最佳序列题解题目描述你得到了一个\(N\)个非负整数组成的序列\(A\)。我们称由序列\(A\)的连续若干项组成的新序列为\(A\)的一个连续子序列。给出两个正整数\(L,R(L\leR)\)。称\(A\)的每一个长度不小于\(L\)且不大于\(R\)的连续子序列为一个纯洁序列,定义纯洁度......
  • 题解 [NOIP2022] 建造军营
    树形\(dp\)好题。观察题目发现,如果B国袭击后,导致A国两个军营不联通,那么B国袭击的一定是一条割边,反之,如果袭击的不是割边,那么不会导致任何影响。所以先进行边双缩点,变成一棵树,记每个联通块(缩完后)内的点数为\(wa\),边数为\(wb\),不妨先考虑对于树的情况如何处理。将问题进行转......
  • 20241022 校测T1 链链链(chain)题解
    Problem链链链chain你有一个长度为\(n\)的链,编号为\(i(1≤i<n)\)的边连接着结点\(i\)与\(i+1\)。每个结点\(i\)上有一个整数\(a_i\)。你需要做以下操作\(n−1\)次:•选择一条还未被断开的边,设其连接了点\(i\)与\(i+1\),将其断开。•断边后,对于所......
  • 准备CSP 复赛
    用来方便自己复习版本C++14目录快读和快输注意事项缺省源快读和快输链接:浅谈C++IO优化——读优输优方法集锦最全快读、快写模板「持续更新」-凌云_void-博客园读入、输出优化-OIWiki打的时候一定要注意运算符优先级QWQ(有时候真的很难发现)错误示例:int......
  • P9751 [CSP-J 2023] 旅游巴士 题解
    思路首先,举一个例子,假如说小Z到了入口,但是没到时间,所以没法进去,该怎么办?当然是等$k$个时间单位呀.除此之外,像到了其他景区,但是还没开门怎么办?继续等$k$的非负整数倍时间呀.知道这个后,我们先定义状态$f_{i,j}$,表示到达点$i$时,路径长度(即时间)$mod$$k$的最早时......
  • P9749 [CSP-J 2023] 公路 题解
    此题贪心食用更佳在输入油价的时候,我们边计算油价的最小值和路程和.当路程之和$>0$时,计算油价并且减去对应路程即可.注意事项要开$long$$long$!!!.代码#include<iostream>#include<cstdio>#include<cmath>#include<cstring>usingnamespacestd;typedeflonglo......
  • P9750 [CSP-J 2023] 一元二次方程 题解
    大模拟此题大模拟即可,只需注意几点:分母$>0$.要给根式化简.分数要约分.求较大根,那就$b^2$加$\bigtriangleup$即可.分母>0因为求根公式中,分母中只有$a$一个未知数,所以我们只需保证$a>0$即可.所以,当$a<0$时,我们把$a,b,c$全部取相反值.但这也是......
  • 题解:P10949 四叶草魔杖
    2024/10/16更新:修改了状态的枚举方式,时间复杂度变为\(O(3^n)\)。题目传送门前言本篇题解默认您已熟练掌握最小生成树、状压dp及其应用,如果您还不会,请先阅读相关博客。分析我们要选出一条边,通过边转移能量,使得所有宝石的能量都为\(0\)。这看上去挺麻烦的,让我们挖掘一......