[CSP-J 2022] 解密

题目描述

给定一个正整数 k,有 k 次询问,每次给定三个正整数 ni, ei, di,求两个正整数 pi, qi,使 ni = pi × qiei × di = (pi - 1)(qi - 1) + 1。

输入格式

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

接下来 k 行,第 i 行三个正整数 ni, di, ei

输出格式

输出 k 行,每行两个正整数 pi, qi 表示答案。

为使输出统一,你应当保证 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。

保证对于 100% 的数据,1 ≤ k ≤ 105,对于任意的 1 ≤ ik,1 ≤ ni ≤ 1018,1 ≤ ei × di ≤ 1018 ,1 ≤ m ≤ 109

| 测试点编号 | k ≤ | n ≤ | m ≤ | 特殊性质 | | :----------: | :----------: | :----------: | :----------: | :----------: | | 1 | 103 | 103 | 103 | 保证有解 | | 2 | 103 | 103 | 103 | 无 | | 3 | 103 | 109 | 6 × 104 | 保证有解 | | 4 | 103 | 109 | 6 × 104 | 无 | | 5 | 103 | 109 | 109 | 保证有解 | | 6 | 103 | 109 | 109 | 无 | | 7 | 105 | 1018 | 109 | 保证若有解则 p=q | | 8 | 105 | 1018 | 109 | 保证有解 | | 9 | 105 | 1018 | 109 | 无 | | 10 | 105 | 1018 | 109 | 无 | 用C++内容:```cpp #include #include #include using namespace std;

// 判断一个数是否为素数 bool isPrime(int n) { if (n <= 1) { return false; } for (int i = 2; i <= sqrt(n); ++i) { if (n % i == 0) { return false; } } return true; }

// 寻找p和q的值 pair<int, int> findPQ(int n, int e, int d) { int m = n - e * d + 2; if (m % 2 != 0) { return make_pair(-1, -1); } m /= 2; for (int i = 2; i <= sqrt(m); ++i) { if (m % i == 0 && isPrime(i)) { int p = i; int q = m / i; if (isPrime(q)) { return make_pair(p, q); } } } return make_pair(-1, -1); }

int main() { int k; cin >> k; vector<pair<int, int>> ans; for (int i = 0; i < k; ++i) { int n, e, d; cin >> n >> d >> e; pair<int, int> pq = findPQ(n, e, d); ans.push_back(pq); } for (int i = 0; i < k; ++i) { if (ans[i].first == -1) { cout << "NO" << endl; } else { cout << ans[i].first << " " << ans[i].second << endl; } } return 0; }

CSP-J 2022 解密:RSA 算法解密问题

原文地址: https://www.cveoy.top/t/topic/qvVd 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录