查找组成一个偶数最接近的两个素数 C++ 牛客网

1.来源
https://www.nowcoder.com/questionTerminal/f8538f9ae3f1484fb137789dec6eedb9?toCommentId=289324
2.题目
任意一个偶数(大于2)都可以由2个素数组成,组成偶数的2个素数有很多种情况,本题目要求输出组成指定偶数的两个素数差值最小的素数对。本题含有多组样例输入。

输入描述:
输入一个偶数
输出描述:
输出两个素数

示例1
输入
20
输出
7
13

3.代码
方法1:

#include<iostream>
#include<cmath>
using namespace std;
//思路:偶数num由两个素数组成,那么这两个素数一定是一个比num的一半小的,一个比num的一半大的数
//从num/2开始向两边找到最近的两个素数,就是符合题目要求的
bool isPrime(int n)
{
    
    
   int i=0;
    for(int i=2;i<=sqrt(n);i++){
    
    
        if(n%i==0)//如果能被除了1和它本身的数整除,就不是素数
            return false;
    }
    return true;
}
int main()
{
    
    
    int num=0;
    while(cin>>num)
    {
    
    
    int mid_num=num/2;
    int a=mid_num;//左值
    int b=0;//右值
    while(a)
    {
    
    
    b=num-a;
    if(!isPrime(a)||!isPrime(b))
    break;
    a--;//a发生变化,b也一定会发生变化
    }
  }
    return 0;
}

方法2:

#include<iostream>
#include<cmath>
using namespace std;
//思路:偶数num由两个素数组成,那么这两个素数一定是一个比num的一半小的,一个比num的一半大的数
//从num/2开始向两边找到最近的两个素数,就是符合题目要求的
bool isPrime(int n)
{
    
    
   int i=0;
    for(int i=2;i<=sqrt(n);i++){
    
    
        if(n%i==0)//如果能被除了1和它本身的数整除,就不是素数
            return false;
    }
    return true;
}
int main()
{
    
    
    int num=0;
    while(cin>>num)
    {
    
    
    int mid_num=num/2;
    //不能按下面这样写,因为不符合全部情况,6-> 3  3-3=0
    //int left=mid_num-1,right=mid_num+1;
    int left=mid_num,right=num-left;
    while(!isPrime(left)||!isPrime(right))
    {
    
    
        left--;
        right++;
    }
    cout<<left<<endl;
    cout<<right<<endl;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_43807876/article/details/110696099