面试-程序-车站建造问题

题目描述

有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为非质数,则可表示为三个质数的和,需要在这两个村庄之间再修两座车站

猜你喜欢

转载自blog.csdn.net/baidu_29244931/article/details/106827188