upd: bug located
This commit is contained in:
@ -639,16 +639,27 @@ int2048 GetInv(const int2048 &B, int n) {
|
|||||||
remain.val[2 * n / int2048::kNum] = kPow10[2 * n % int2048::kNum];
|
remain.val[2 * n / int2048::kNum] = kPow10[2 * n % int2048::kNum];
|
||||||
remain.num_length = (2 * n) + 1;
|
remain.num_length = (2 * n) + 1;
|
||||||
UnsignedMultiply(sub_soluton_copy_1, ¤t_B);
|
UnsignedMultiply(sub_soluton_copy_1, ¤t_B);
|
||||||
UnsignedMinus(remain, &sub_soluton_copy_1);
|
int cmp = UnsignedCmp(remain, sub_soluton_copy_1);
|
||||||
for (int i = 64; i > 0; i >>= 1) {
|
if (cmp == 0) return std::move(res);
|
||||||
int2048 tmp_B(current_B);
|
if (cmp > 0) {
|
||||||
tmp_B.UnsignedMultiplyByInt(i);
|
UnsignedMinus(remain, &sub_soluton_copy_1);
|
||||||
if (UnsignedCmp(remain, tmp_B) >= 0) {
|
for (int i = 64; i > 0; i >>= 1) {
|
||||||
res += i;
|
int2048 tmp_B(current_B);
|
||||||
UnsignedMinus(remain, &tmp_B);
|
tmp_B.UnsignedMultiplyByInt(i);
|
||||||
|
if (UnsignedCmp(remain, tmp_B) >= 0) {
|
||||||
|
res += i;
|
||||||
|
UnsignedMinus(remain, &tmp_B);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return std::move(res);
|
||||||
|
} else {
|
||||||
|
UnsignedMinus(sub_soluton_copy_1, &remain);
|
||||||
|
for (int i = 64; i > 0; i >>= 1) {
|
||||||
|
int2048 tmp_B(current_B);
|
||||||
|
tmp_B.UnsignedMultiplyByInt(i);
|
||||||
|
res -= i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return std::move(res);
|
|
||||||
}
|
}
|
||||||
inline void UnsignedDivide(int2048 &A, const int2048 *pB) {
|
inline void UnsignedDivide(int2048 &A, const int2048 *pB) {
|
||||||
int2048 B(*pB);
|
int2048 B(*pB);
|
||||||
|
@ -36,9 +36,9 @@ opt_python=[]
|
|||||||
|
|
||||||
if True:
|
if True:
|
||||||
for i in range(0,10):
|
for i in range(0,10):
|
||||||
val=randint(-10**100,10**100)
|
val=randint(-10**999,10**999)
|
||||||
if i==0:
|
if i==0:
|
||||||
val=randint(-10**100,10**100)
|
val=randint(-10**999,10**999)
|
||||||
opt_cpp.append("a_"+str(i)+"=int2048(\""+str(val)+"\");")
|
opt_cpp.append("a_"+str(i)+"=int2048(\""+str(val)+"\");")
|
||||||
opt_python.append("a_"+str(i)+"="+str(val))
|
opt_python.append("a_"+str(i)+"="+str(val))
|
||||||
opt_cpp.append("a_"+str(i)+".print(); puts(\"\");")
|
opt_cpp.append("a_"+str(i)+".print(); puts(\"\");")
|
||||||
|
Reference in New Issue
Block a user