
Untitled
By: a guest on
Jun 30th, 2012 | syntax:
None | size: 1.08 KB | hits: 12 | expires: Never
func IsSquareBig(n *big.Int) bool {
v, w, q := big.NewInt(16), big.NewInt(0), big.NewInt(0)
if (w.Cmp(q.Mod(n, v)) != 0 &&
w.SetInt64(int64(1)).Cmp(q.Mod(n, v)) != 0 &&
w.SetInt64(int64(4)).Cmp(q.Mod(n, v)) != 0 &&
w.SetInt64(int64(9)).Cmp(q.Mod(n, v)) != 0) ||
(w.SetInt64(int64(0)).Cmp(q.Mod(n, v.SetInt64(int64(25)))) != 0 &&
w.SetInt64(int64(1)).Cmp(q.Mod(n, v.SetInt64(int64(5)))) != 0 &&
w.SetInt64(int64(4)).Cmp(q.Mod(n, v)) != 0) ||
(w.SetInt64(int64(0)).Cmp(q.Mod(n, v.SetInt64(int64(49)))) != 0 &&
w.SetInt64(int64(2)).Cmp(q.Mod(n, v.SetInt64(int64(7)))) != 0 &&
w.SetInt64(int64(4)).Cmp(q.Mod(n, v)) != 0) ||
(w.SetInt64(int64(0)).Cmp(q.Mod(n, v.SetInt64(int64(11)))) != 0 &&
w.SetInt64(int64(1)).Cmp(q.Mod(n, v)) != 0 &&
w.SetInt64(int64(3)).Cmp(q.Mod(n, v)) != 0 &&
w.SetInt64(int64(4)).Cmp(q.Mod(n, v)) != 0 &&
w.SetInt64(int64(5)).Cmp(q.Mod(n, v)) != 0 &&
w.SetInt64(int64(9)).Cmp(q.Mod(n, v)) != 0) {
return false
}
srt := SqrtBig(n)
return n.Cmp(srt.Mul(srt, srt)) == 0
}