社区讨论
关于扩欧与卡常
P3811【模板】模意义下的乘法逆元参与者 6已保存回复 16
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 16 条
- 当前快照
- 1 份
- 快照标识符
- @locdfzyi
- 此快照首次捕获于
- 2023/10/30 11:59 2 年前
- 此快照最后确认于
- 2023/11/04 23:42 2 年前
这题是故意卡扩欧的吗。。。
T 了最后一个点:评测记录
O2 也开了,快读快写也用了,inline 也用了,register 也用了,我想不出哪里还可以卡常了。
请问扩欧的话卡常还有救吗?如果可以,如何优化?
(不行的话我就跑去写递推了)
80pts 的代码:
CPP#include <bits/stdc++.h>
int ra, rp;
inline void out(int x) {
int f[16], i = 0;
while (x > 0) {
++i;
f[i] = x % 10 + '0';
x = x / 10;
}
while (i > 0) {
putchar(f[i]);
--i;
}
putchar('\n');
}
inline int read() {
register int a = getchar(), b = 0;
while (a > '9' || a < '0') {
a = getchar();
}
while (a >= '0' && a <= '9') {
b = b * 10 + a - '0';
a = getchar();
}
return b;
}
int exgcd(int a, int b, int &x, int &y) {
if (a < b) {
exgcd(b, a, x, y);
}
int m = 0, n = 1;
x = 1, y = 0;
while (b != 0) {
int d = a / b, t;
t = m; m = x - d * t; x = t;
t = n; n = y - d * t; y = t;
t = a % b; a = b; b = t;
}
return a;
}
inline int inv(int a, int p) {
int x, y;
exgcd(a, p, x, y);
x = x % p;
return x >= 0 ? x : p + x;
}
int main() {
ra = read(); rp = read();
for (register int i = 1; i <= ra; i++) {
out(inv(i, rp));
}
return 0;
}
请求支援,谢谢!
回复
共 16 条回复,欢迎继续交流。
正在加载回复...