**题目大意:**有108个村庄排在一条公路上,依次编号为0~108-1,相邻村庄距离为1,其中有n个村庄居住着牛牛,居住着牛牛的村庄从小到大依次为a0~an-1,其中保证a0=0.
现在需要建设车站,有两个要求必须被满足:
1、每个有牛牛居住的村庄必须修建车站。
2、相邻车站的距离必须为1或为某个质数。
现给出n和a数组,求需要建设车站的最小数量。
解题思路:
哥德巴赫猜想:对于任意大于2的偶数,可以拆解为两个质数的和。对于奇数可以拆解为三个质数的和。不过此题要求车站的数量最少,要注意间隔为奇数时,可以拆解为两个质数的和。
具体实现如下:class Solution {
public:
/
*
* @param n int整型
* @param a int整型一维数组
* @param aLen int a数组长度
* @return int整型
/
int prime(int k)
{
for(int j=2;j<=sqrt(k);j++)
{
if(k%j==0)
{
return 0;
break;
}
}
return 1;
}
int work(int n, int a, int aLen) {
// write code here
int ans=n;//有n 个村庄有牛牛,所以初始为n
for(int i=1;i<aLen;i++)
{
int k=a[i]-a[i-1];
if(prime(k))
{
continue;//如果间隔为质数不学要建立车站,直接接下一次循环
}
else if(k%2==0)
{
ans++;//由哥德巴赫猜想为偶数则+1
}
else if(prime(k-2))
{
ans++;//判断是否可以分解为两个质数2和(k-2)
}
else
{
ans+=2;//只能分解为三个质数
}
}
return ans;
}
};
车站建造问题
最新推荐文章于 2020-12-18 10:44:43 发布