Software Engineering

Find out how to Remedy Easy Sq. Numbers in Golang

Find out how to Remedy Easy Sq. Numbers in Golang
Written by admin


The problem

On this problem, you’ll be given a quantity n (n > 0) and your activity shall be to return the smallest sq. quantity N (N > 0) such that n + N can be an ideal sq.. If there isn’t a reply, return -1 (nil in Clojure, Nothing in Haskell, None in Rust).

clear up 13 = 36
<em>; as a result of 36 is the smallest good sq. that may be added to 13 to type an ideal sq. => 13 + 36 = 49</em>

clear up 3 = 1 <em>; 3 + 1 = 4, an ideal sq.</em>
clear up 12 = 4 <em>; 12 + 4 = 16, an ideal sq.</em>
clear up 9 = 16 
clear up 4 = nil

The answer in Golang

Possibility 1:

package deal answer
func Remedy(n int) int {
  res := -1
  for i:= 1; i * i < n; i++ {
    if n % i == 0 && (n / i - i) % 2 == 0 {
      res = (n / i - i) *  (n / i - i) / 4
    }
  }
  return res
}

Possibility 2:

package deal answer
import "math"
func Remedy(n int) int {
  // n+a**2==b**2 => n=b2-a2=(a-b)(a+b) => b=(c+d)/2; a=d-b
  for i := int(math.Sqrt(float64(n))); i > 0; i-- {
    if npercenti == 0 {
      c, d := i, n/i
      b := (c + d) / 2
      a := d - b
      if a > 0 && n+a*a == b*b { return a * a }
    }
  }
  return -1
}

Possibility 3:

package deal answer
import "math"
func Remedy(n int) int {
  upperBound := n
  lowerBound := 1
  for  lowerBound <= upperBound {
    sq. := lowerBound*lowerBound
    numToCheck := math.Sqrt(float64(sq. + n))
    if math.Ground(numToCheck) == math.Ceil(numToCheck) {
      return sq.
    }
    lowerBound++ 
  }
  return -1
}

Take a look at circumstances to validate our answer

package deal solution_test
import (
  . "github.com/onsi/ginkgo"
  . "github.com/onsi/gomega"
)
var _ = Describe("Instance assessments", func() {
  It("It ought to work for fundamental assessments", func() {
    Anticipate(Remedy(1)).To(Equal(-1))
    Anticipate(Remedy(2)).To(Equal(-1))
    Anticipate(Remedy(3)).To(Equal(1))
    Anticipate(Remedy(4)).To(Equal(-1))  
    Anticipate(Remedy(5)).To(Equal(4))
    Anticipate(Remedy(7)).To(Equal(9))
    Anticipate(Remedy(8)).To(Equal(1))
    Anticipate(Remedy(9)).To(Equal(16))
    Anticipate(Remedy(10)).To(Equal(-1))
    Anticipate(Remedy(11)).To(Equal(25))
    Anticipate(Remedy(13)).To(Equal(36))
    Anticipate(Remedy(17)).To(Equal(64))
    Anticipate(Remedy(88901)).To(Equal(5428900))
    Anticipate(Remedy(290101)).To(Equal(429235524)) 
  })
})

About the author

admin

Leave a Comment