// Divisors returns int64 slice of divisors of n func Divisors(n int64) []int64 { f, t := []int64{}, int64(math.Sqrt(float64(n))) for i := int64(1); i <= t; i++ { if n%i == 0 { f = append(f, i) if i*i != n { f = append(f, n/i) } } } sortutil.Int64Slice(f).Sort() sortutil.Dedupe(sortutil.Int64Slice(f)) return f }
func getNeighbours(hashBits uint64, steps uint8) []uint64 { var neighbours C.GeoHashNeighbors var hash C.GeoHashBits hash.bits = C.uint64_t(hashBits) hash.step = C.uint8_t(steps) C.geohashNeighbors(&hash, &neighbours) neighbourArr := sortutil.Uint64Slice{ uint64(hashBits), uint64(neighbours.north.bits), uint64(neighbours.east.bits), uint64(neighbours.west.bits), uint64(neighbours.south.bits), uint64(neighbours.north_east.bits), uint64(neighbours.south_east.bits), uint64(neighbours.north_west.bits), uint64(neighbours.south_west.bits), } // sort.Sort(neighbourArr) if steps <= 6 { sortutil.Dedupe(neighbourArr) // Can have duplicates if search range is large (>~5000km) } return neighbourArr }