P-Adic square roots: Difference between revisions
→{{header|Wren}}: Updated in line with changes to FB example.
mNo edit summary |
(→{{header|Wren}}: Updated in line with changes to FB example.) |
||
Line 643:
if (P < 2 || K < 1) return 1
P = Math.min(P, PMAX) // maximum short prime
K = Math.min(K, EMX-1) // maximum array length▼
if (sw != 0) {
System.write("%(a)/%(b) + ") // numerator, denominator
Line 671 ⟶ 670:
return -1
}
▲ K = Math.min(K + _v, EMX-1) - _v // maximum array length
_v = (_v/2).truncate
if (a.abs > AMX || b > AMX) return -1
var bb = BigInt.new(b) // to avoid overflowing 'f(x) = b * x * x – a'
Line 725 ⟶ 726:
pk = 4
i = _v + 2
while (i <= K - 1 + _v) {
pk = pk * 2
f = bb * x * x - a
Line 744 ⟶ 745:
pk = 1
i = _v + 1
while (i <= K - 1 + _v) {
pk = pk * P
f = bb * x * x - a
Line 756 ⟶ 757:
}
}
K = i - _v
if (sw != 0) System.print("lift: %(x) mod %(P)^%(K)")
return 0
Line 767 ⟶ 768:
var s = 0
var pk = 1
for (i in t..K-1+
P1 = pk
pk = pk * P
Line 885 ⟶ 886:
[17, 1, 2, 9],
[497, 10496, 2, 18],
[10496, 497, 2,
[3141, 5926, 3,
[2718, 281, 3,
[-1, 1, 5, 8],
[86, 25, 5, 8],
[2150, 1, 5,
[2,1, 7, 8],
[-2645, 28518, 7, 9],
Line 959 ⟶ 960:
497/10496 + 0(2^18)
lift:
sqrt +/-
...0 1 0 1 1 0 1 0 1 1 0 0 1 1. 1 1 0 1
Line 967 ⟶ 968:
497/10496
10496/497 + 0(2^
lift:
sqrt +/-
...
...
sqrt^2
10496/497
3141/5926 + 0(3^
lift: 3406966 mod 3^
sqrt +/-
...
...
sqrt^2
3141/5926
2718/281 + 0(3^
lift:
sqrt +/-
...
...
sqrt^2
2718/281
Line 1,004 ⟶ 1,005:
86/25 + 0(5^8)
lift:
sqrt +/-
...1 1 0 2 4 1 1. 1
Line 1,012 ⟶ 1,013:
86/25
2150/1 + 0(5^
lift:
sqrt +/-
...
...
sqrt^2
2150
Line 1,031 ⟶ 1,032:
-2645/28518 + 0(7^9)
lift:
sqrt +/-
...6 5 3 1 2 4 1 4. 1
|