Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
40
Task/Pells-equation/Swift/pells-equation.swift
Normal file
40
Task/Pells-equation/Swift/pells-equation.swift
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
func solvePell<T: BinaryInteger>(n: T, _ a: inout T, _ b: inout T) {
|
||||
func swap(_ a: inout T, _ b: inout T, mul by: T) {
|
||||
(a, b) = (b, b * by + a)
|
||||
}
|
||||
|
||||
let x = T(Double(n).squareRoot())
|
||||
var y = x
|
||||
var z = T(1)
|
||||
var r = x << 1
|
||||
var e1 = T(1)
|
||||
var e2 = T(0)
|
||||
var f1 = T(0)
|
||||
var f2 = T(1)
|
||||
|
||||
while true {
|
||||
y = r * z - y
|
||||
z = (n - y * y) / z
|
||||
r = (x + y) / z
|
||||
|
||||
swap(&e1, &e2, mul: r)
|
||||
swap(&f1, &f2, mul: r)
|
||||
|
||||
(a, b) = (f2, e2)
|
||||
|
||||
swap(&b, &a, mul: x)
|
||||
|
||||
if a * a - n * b * b == 1 {
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var x = BigInt(0)
|
||||
var y = BigInt(0)
|
||||
|
||||
for n in [61, 109, 181, 277] {
|
||||
solvePell(n: BigInt(n), &x, &y)
|
||||
|
||||
print("x\u{00b2} - \(n)y\u{00b2} = 1 for x = \(x) and y = \(y)")
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue