大家好,我是энтджей,今天是我2026年第二十三次正式发题解!
2026年发布的题解!
能不能点个赞
必备知识点:
- 完全平方公式


首先简化题意:
- 对于给定的 n, d, e,计算出 p, q,要求满足 pq=n、ed=(p−1)(q−1)+1
然后就是写代码:
- 暴力枚举 p 有 60 的高分(真的不低了)
- 暴力枚举有个小技巧,∵p≤q ∴p仅仅需要枚举到 n
- 那正解怎么求呢,需要利用一些数学知识:
已知 pq=n,ed=(p−1)(q−1)+1我们根据 ed=(p−1)(q−1)+1 来推导一些东西∵ ed=(p−1)(q−1)+1∴ ed=p(q−1)−1×(q−1)+1∴ ed=pq−p−q+1+1∴ ed=pq−p−q+2∵ pq=n∴ ed=n−p−q+2∴ ed−n−2=(−p)−q∴ (ed−n−2)×(−1)=[(−p)−q]×(−1)∴ (−ed)−(−n)−(−2)=[−(−p)]−(−q)∴ (−ed)+n+2=p+q∴ n+2−ed=p+q设 m=n+2−ed则 m=p+qm2=(p+q)2m2=p2+2pq+q2m2−4n=p2+2pq+q2−4pqm2−4n=p2+q2+2pq−4pqm2−4n=p2+q2−2pqm2−4n=(p−q)2m2−4n=(p−q)2m2−4n=p−q设 t=m2−4n则 t=p−q整理后得出:{m=p+qt=p−q相加得:m+t=(p+q)+(p−q)m+t=p+q+p−qm+t=2p2p=m+tp=2m+t相减得:m−t=(p+q)−(p−q)m−t=p+q−p+qm−t=2q2q=m−tq=2m−t
蒟蒻作者太拉了,建议你们多看看理解一下捏
- 综上所述,可以发现 m=n+2−ed, t=m2−4n, p=2m+t, q=2m−t
- 显然,当 t 不是整数时,当m+t 或 m−t 除以 2 不是整数 (即不是偶数)时是没有解的(题目说了 p,q 是整数)
- 所以非常好判断
最后输出:
- 输出结果,记得取 min 和 max 以防出错
完整代码:
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1e6 + 10;
const int INF = 1e18;
void solve () {
int n, d, e;
cin >> n >> d >> e;
int m = ______;
int t = ______;
if (没有解的时候是______的时候) {
cout << "NO" << endl;
} else {
int p = ______, q = ______;
cout << min(p, q) << " " << max(p, q) << endl;
}
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
int _;
cin >> _;
while (_--) {
solve();
}
return 0;
}
我感觉我都不需要贴代码你们应该能写
🎉完结撒花🎉
有帮助,赞一个