第一次参加 CSP。
T1 [CSP-J 2022] 乘方
分析
我们只需不停地去讲答案乘上一个 a a a,循环 b b b 次,一旦大于了 1 0 9 10^9 109 就输出 − 1 -1 −1,不然输出乘方的答案。
AC code
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1e9;
int res = 1,a,b;
signed main() {
cin >> a >> b;
if (a == 1) {
cout << 1 << endl; return 0; }
for (int i = 1; i <= b; i ++ ) {
res *= a;
if (res > N) {
puts("-1");
return 0;
}
}
cout << res << endl;
return 0;
}
T2 [CSP-J 2022] 解密
分析
这道题我在考场上只写了部分分的做法,如果我们按照正常的做法去枚举 p p p 与 q q q 的话,就会 TLE。
正解需要解一个一元二次方程。
首先,我们来看一下题目里给出的 m m m 是怎么推出来的。
∵ e × d = ( p − 1 ) ( q − 1 ) + 1 \because e \times d = (p - 1)(q - 1) + 1 ∵e×d=(p−1)(q−1)+1
∴ e × d = p × q − p − q + 2 \therefore e \times d = p \times q - p - q + 2 ∴e×d=p×q−p−q+2
∵ n = p × q \because n = p \times q ∵n=p×q
∴ e × d = n − ( p + q ) + 2 \therefore e \times d = n - (p + q) + 2 ∴e×d=n−(p+q)+2
∴ p + q = n − e × d + 2 = m \therefore p + q = n - e \times d + 2 = m ∴p+q=n−e×d+2=m
所以我们得出的结论是 p + q = m p + q = m p+