"""
这个题用的变量有点乱
主要颓废一天一点也不想写,我就不再重新敲了,因为这题比较简单
"""
n = int(input())
A = list(map(int, input().split()))
# 线性筛
def is_p(a):
"""
:param a: 筛选出1~a之间的质数
:return:
"""
# li: 当是素数的时候,在列表中的该位置存放的是相应的素数,当该值不是素数的时候存储的是 0
# li:列表与普通的线性筛不同,这样是为了方便后面的操作
li = [0, 0]
# vis:做标记数组,这里当为0 是表示没有标记过是素数
# 如果该位置被标记,则说明不是素数
vis = [0] * (a + 1)
vis[0] = vis[1] = 1
# lis:列表存放的是素数,这个;lis列表只在线性筛的时候用到了
lis = []
for i in range(2, a + 1):
if vis[i] == 0:
lis.append(i)
li.append(i)
else:
li.append(0)
for x in lis:
if x * i > a:
break
vis[x * i] = 1
if i % x == 0:
break
return li, vis
# 这里面的数据9100是根据题目给的范围来给的
li, vis = is_p(91000)
# 下面的过程是题目的模拟过程
ans = 0
for i in range(n):
# 如果是质数则直接跳过
if vis[A[i]] == 0:
continue
ant = 1e9
j = k = A[i]
while True:
# 这里需要注意边界问题,一开始我都忘记了
if j >= 0 and li[j] != 0:
b = li[j]
break
j -= 1
while True:
# 这里需要注意边界问题,一开始俺都忘记了
if k < 91000 and li[k] != 0:
c = li[k]
break
k += 1
# 找出当下的数 左右两边的质数距离较近的那一个
ant = min(A[i] - b, c - A[i])
ans += ant
print(ans)