У меня есть два числа, например, цифры 12 и 16.
факторы 12: 1, 2, 3, 4, 6, 12
множителями 16 являются 1, 2, 4, 8, 16
общими коэффициентами этих двух чисел являются 1, 2 и 4.
Таким образом, число общих факторов3. Мне нужно построить программу Go для поиска чисел, общих для двух чисел.Но программа должна быть эффективной и с минимальным количеством циклов или без циклов.Я предоставлю свой код, а вы также можете внести свой вклад и предложить другие лучшие методы.
package main
import "fmt"
var (
fs []int64
fd []int64
count int
)
func main() {
commonFactor(16, 12)
commonFactor(5, 10)
}
func commonFactor(num ...int64) {
count = 0
if num[0] < 1 || num[1] < 1 {
fmt.Println("\nFactors not computed")
return
}
for _, val := range num {
fs = make([]int64, 1)
fmt.Printf("\nFactors of %d: ", val)
fs[0] = 1
apf := func(p int64, e int) {
n := len(fs)
for i, pp := 0, p; i < e; i, pp = i+1, pp*p {
for j := 0; j < n; j++ {
fs = append(fs, fs[j]*pp)
}
}
}
e := 0
for ; val&1 == 0; e++ {
val >>= 1
}
apf(2, e)
for d := int64(3); val > 1; d += 2 {
if d*d > val {
d = val
}
for e = 0; val%d == 0; e++ {
val /= d
}
if e > 0 {
apf(d, e)
}
}
if fd == nil {
fd = fs
}
fmt.Println(fs)
}
for _, i := range fs {
for _, j := range fd {
if i == j {
count++
}
}
}
fmt.Println("Number of common factors =", count)
}
Вывод:
Факторы из 16: [1 2 4 8 16] Факторыиз 12: [1 2 4 3 6 12]
Количество общих факторов = 3
Факторы 5: [1 5] Факторы 10: [1 2 5 10]
Количество общих факторов = 2
Goplayground