package main
import (
"bufio"
"fmt"
"math/rand"
"os"
"time"
)
func main() {
reader := bufio.NewReader(os.Stdin)
var n int
if _, err := fmt.Fscan(reader, &n); err != nil {
return
}
a := make([]int64, n)
for i := 0; i < n; i++ {
fmt.Fscan(reader, &a[i])
}
r := rand.New(rand.NewSource(time.Now().UnixNano()))
r.Shuffle(n, func(i, j int) {
a[i], a[j] = a[j], a[i]
})
var ans int64 = 0
for _, x := range a {
if x%2 != 0 {
ans++
}
}
tested := make(map[int64]bool)
tested[2] = true
cost := func(p int64, currentMin int64) int64 {
var c int64 = 0
for _, x := range a {
if x < p {
c += p - x
} else {
rem := x % p
if rem < p-rem {
c += rem
} else {
c += p - rem
}
}
if c >= currentMin {
return currentMin
}
}
return c
}
limit := 40
if limit > n {
limit = n
}
for i := 0; i < limit; i++ {
for d := int64(-1); d <= 1; d++ {
val := a[i] + d
if val <= 1 {
continue
}
for val%2 == 0 {
val /= 2
}
for div := int64(3); div*div <= val; div += 2 {
if val%div == 0 {
if !tested[div] {
tested[div] = true
ans = min(ans, cost(div, ans))
}
for val%div == 0 {
val /= div
}
}
}
if val > 1 && !tested[val] {
tested[val] = true
ans = min(ans, cost(val, ans))
}
}
}
fmt.Println(ans)
}
func min(a, b int64) int64 {
if a < b {
return a
}
return b
}