题意
求x,使得 ax2+bx+cmod1e9=0
思路
看了别人的代码,马后炮一下。有什么不对的地方欢迎指出。
要使得 xmod1e9=0 ,那么 xmod29=0 and xmod59=0
我们先求出x1、x2,使得代入二次方程之后的结果分别 mod29mod59=0
如果 x2mod29=x1 ,那么说明 x2=k∗29+x1⇒ax22+bx2+c≡ax21+bx1+c(mod25)=0
那么此时x2就是符合条件的。
代码
class PolynomialRemainder {
public:
LL Calcu(LL a, LL b, LL c, LL k)
{
for (int i = 0; i < k; i++)
if ((a*i%k*i + b*i%k + c) % k == 0) return i;
return -1;
}
int findRoot(int a, int b, int c) {
int mul_2 = 1, mul_5 = 1;
for (int i = 0; i < 9; i++) mul_2 *= 2;
for (int i = 0; i < 9; i++) mul_5 *= 5;
LL p1 = Calcu(a, b, c, mul_2);
LL p2 = Calcu(a, b, c, mul_5);
if (p1 == -1 || p2 == -1) return -1;
while (p2 % mul_2 != p1) p2 += mul_5;
return p2;
}
};