gcd algorithm added

pull/4/head
Alexander Kuleshov 10 years ago
parent 0726d6c260
commit ba0674c7e0

@ -0,0 +1,47 @@
package gcd
func gcd(x uint, y uint) uint {
var shift uint = 0
if x == y {
return x
}
if x == 0 {
return y
}
if y == 0 {
return x
}
for shift := 0; (x | y) & 1 == 0; shift++ {
x = x >> 1
y = y >> 1
}
for ; (x & 1) == 0 ; {
x = x >> 1
}
for ; y == 0 ; {
for ; (y & 1) == 0 ; {
y = y >> 1
}
if x > y {
t := x
x = y
y = t
}
y = y - x
}
y = y << shift
return y
}

@ -0,0 +1,18 @@
package gcd
import "testing"
func Test_gcd(t *testing.T) {
if gcd(100, 200) != 50 {
t.Error("[Error] gcd(100, 200) is wrong")
}
if gcd(4, 2) != 1 {
t.Error("[Error] gcd(4,2) is wrong")
}
if gcd(6, 3) != 3 {
t.Error("[Error] gcd(6,3) is wrong")
}
}
Loading…
Cancel
Save