您的位置:首页 > 其它

查找组成一个偶数最接近的两个素数

2014-06-23 23:59 826 查看
功能:查找组成一个偶数最接近的两个素数

任意一个偶数(大于2)都可以由2个素数组成,组成偶数的2个素数有很多种情况,本题目要求输出组成指定偶数的两个素数差值最小的素数对

//实例:20  输出:7 13

思路:先找出满足条件自身和sum-自身都是素数的数,之后再运用循环来找出距离最近的两个素数

参考代码:

//功能:任意一个偶数(大于2)都可以由2个素数组成,组成偶数的2个素数有很多种情况,本题目要求输出组成指定偶数的两个素数差值最小的素数对
//实例:20  输出:7 13

#include <iostream>
using namespace std;

//判断一个数是否为素数
bool JudgIsPrime(const int a)
{
for(int i = 2;i <= a/2; i++)
{
if(a % i == 0)
return 0;
}
return 1;
}

int main()
{
int b;
cin >> b;

//非偶数异常输入
while(b % 2 != 0)
return 0;

int j,distance,t = 0;
int min = 0;
for(j = 2; j <= b/2; j++)
{
if (JudgIsPrime(j) && JudgIsPrime(b - j))
{
distance = b - j -j;
if (min==0 || min > distance)
{
min = distance;
t = j;
}
}
}
cout << t << endl;
cout << (b - t) << endl;
}


运行结果:



算法巧妙之处:

1)判断是否为素数时,只需要设置初始为2,最大值为a/2,而不是a,这样大大提高运算效率。

bool JudgIsPrime(const int a)
{
for(int i = 2;i <= a/2; i++)
{
if(a % i == 0)
return 0;
}
return 1;
}

2)找出距离最短的distance,很巧妙设置初始距离min = 0;之后利用一个if(min == 0 || min > distance)逻辑运算条件来覆盖min,同时更新min,并且利用新的参数t保存j.(这点非常重要)

这里还需要强调一点这个if不能用while,否则就死循环了,要区分if和while的区别。

if (JudgIsPrime(j) && JudgIsPrime(b - j))
{
distance = b - j -j;
if (min==0 || min > distance)
{
min = distance;
t = j;
}
}

                                                                                                                                                                 ——To_捭阖_youth  0:02
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: