题目描述
有108个村庄排在一条公路上,依次编号为0~108-1,相邻村庄距离为1,其中有n个村庄居住着牛牛,居住着牛牛的村庄从小到大依次为a0~an-1,其中保证a0=0.
现在需要建设车站,有两个要求必须被满足:
1、每个有牛牛居住的村庄必须修建车站。
2、相邻车站的距离必须为1或为某个质数。
现给出n和a数组,求需要建设车站的最小数量。
代码
import math
def isPrimes(n):
sign =1
if n==1:
sign=0
else:
for i in range(2, int(math.sqrt(n) + 1)):
if n%i == 0:
sign=0
return sign
class Solution:
def work(self , n , a ):
num = 0
if n==0:
return 0
if len(a)==1:
return 1
for i in range (len(a)-1):
nowid = a[i]
nextid = a[i+1]
de = nextid-nowid
if de==1 or isPrimes(de):
continue
else:
if de%2==0:
num=num+1
continue
else:
if isPrimes(de-2):
num=num+1
continue
else:
num=num+2
continue
return n+num
分析
哥德巴赫猜想
- 当该非质数为偶数时,可以表示为两个质数的和
意思就是在这两个村庄之间再修一座车站即可 - 当该非质数为奇数时,分解为p=(p-2)+2:
若p-2为质数,则可表示为两个质数的和,在这两个村庄之间再修一座车站
若p-2为非质数,则可表示为三个质数的和,需要在这两个村庄之间再修两座车站