Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Jun 30th, 2012  |  syntax: None  |  size: 1.08 KB  |  hits: 12  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. func IsSquareBig(n *big.Int) bool {
  2.                 v, w, q := big.NewInt(16), big.NewInt(0), big.NewInt(0)
  3.                
  4.                 if (w.Cmp(q.Mod(n, v)) != 0 &&
  5.                     w.SetInt64(int64(1)).Cmp(q.Mod(n, v)) != 0 &&
  6.                     w.SetInt64(int64(4)).Cmp(q.Mod(n, v)) != 0 &&
  7.                     w.SetInt64(int64(9)).Cmp(q.Mod(n, v)) != 0) ||
  8.                    
  9.                    (w.SetInt64(int64(0)).Cmp(q.Mod(n, v.SetInt64(int64(25)))) != 0 &&
  10.                         w.SetInt64(int64(1)).Cmp(q.Mod(n, v.SetInt64(int64(5)))) != 0 &&
  11.                         w.SetInt64(int64(4)).Cmp(q.Mod(n, v)) != 0) ||
  12.                        
  13.                    (w.SetInt64(int64(0)).Cmp(q.Mod(n, v.SetInt64(int64(49)))) != 0 &&
  14.                         w.SetInt64(int64(2)).Cmp(q.Mod(n, v.SetInt64(int64(7)))) != 0 &&
  15.                         w.SetInt64(int64(4)).Cmp(q.Mod(n, v)) != 0) ||
  16.                        
  17.                    (w.SetInt64(int64(0)).Cmp(q.Mod(n, v.SetInt64(int64(11)))) != 0 &&
  18.                         w.SetInt64(int64(1)).Cmp(q.Mod(n, v)) != 0 &&
  19.                         w.SetInt64(int64(3)).Cmp(q.Mod(n, v)) != 0 &&
  20.                         w.SetInt64(int64(4)).Cmp(q.Mod(n, v)) != 0 &&
  21.                         w.SetInt64(int64(5)).Cmp(q.Mod(n, v)) != 0 &&
  22.                         w.SetInt64(int64(9)).Cmp(q.Mod(n, v)) != 0) {
  23.                         return false
  24.                 }              
  25.         srt := SqrtBig(n)
  26.         return n.Cmp(srt.Mul(srt, srt)) == 0
  27. }