下面代码实现就是二次剩余里的一个结论。
懒人的话记住结论就行。。
在[0,p-1]中随机挑选一个数a,定义,若:
,那么
就是一组二次剩余。
期望2次就能找到结果。。
这里涉及到根号次幂运算,我们用复数类运算来模拟。
把虚数平方I的值设置为W,那么虚数的单位1就是了。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int mod;
ll I_mul_I; // 虚数单位的平方
struct cpx {
ll real, imag;
cpx(ll real = 0, ll imag = 0): real(real), imag(imag) { }
};
inline bool operator == (cpx x, cpx y) {