题目描述
有108个村庄排在一条公路上,依次编号为0-108-1,相邻村庄距离为1,其中有n个村庄居住着牛牛,居住着牛牛的村庄从小到大依次为a0-an-1,其中保证a0=0.
现在需要建设车站,有两个要求必须被满足:
1、每个有牛牛居住的村庄必须修建车站。
2、相邻车站的距离必须为1或为某个质数。
现给出n和a数组,求需要建设车站的最小数量。
示例1
输入
3,[0,7,11]
输出
4
说明
在0,7,8,11处建造车站,差值分别为7,1,3,符合要求
class Solution {
public:
/**
*
* @param n int整型
* @param a int整型一维数组
* @param aLen int a数组长度
* @return int整型
*/
int work(int n, int* a, int aLen) {
int count = aLen;
for(int i =1; i<n;i++)
{
int temp = a[i]-a[i-1];
//根据歌德巴赫猜想
//如果temp 不是质数则有
//1.是偶数.则可以分成2个质数
//2.是奇数,则temp = (temp-2)+2
//若temp-2不是质数 则 temp可以分为3个质数
//若temp-2是质数,则 temp 可以分为2个质数
if(isPrim(temp))
continue;
else{
if(!isPrim(temp-2)&&temp%2==1)
count+=2;
else{
count++;
}
}
}
return count;
}
//判断是否是质数
bool isPrim(int number){
if(number <3)
return true;
for(int j = 2;j<number;j++){
if(number%j==0)
{
return false;
}
}
return true;
}
};