:::info[Description] Link. :::
:::infoSolution 没有人类了。考虑记 。注意到 和 的次数只差 而且都是齐次式,因此考虑直接任取一组 ,记 。因为 的总次数为 而 的总次数为 因此 。因此只需要满足 且 就可以在等式左右两侧同时约掉 得到 。因此直接取 则 就一定能够满足原等式。
然后如果真的随 则有可能因为 导致没有解,因此多随几组 即可(随即一组成功的概率还是很大的)。 :::
:::success[Code]
namespace lowspeed_song {
inline void init() {
}
inline void sol() {
int n, p; cin >> n >> p;
mt19937 mt(time(0));
uniform_int_distribution<int> dist(1, p - 1);
int a[3];
while (1) {
a[0] = dist(mt), a[1] = dist(mt), a[2] = dist(mt);
sort(a, a + 3);
if (a[0] == a[1] || a[1] == a[2]) continue;
int x = (a[0] + a[1] + a[2]) % p * (power(a[0], n, p) + power(a[1], n, p) + power(a[2], n, p)) % p * (power(a[0], n + n, p) + power(a[1], n + n, p) + power(a[2], n + n, p) % p) % p, y = (power(a[0], n + n + n, p) + power(a[1], n + n + n, p) + power(a[2], n + n + n, p)) % p, div = y * inversion(x, p) % p;
if (div) { a[0] = a[0] * div % p, a[1] = a[1] * div % p, a[2] = a[2] * div % p; break; }
} sort(a, a + 3);
cout << a[0] << ' ' << a[1] << ' ' << a[2] << '\n';
}
} // namespace lowspeed_song:::
难度:无法评定
鲜活指数:无法评定
喜欢的话,留下你的评论吧~