华为机试HJ60:查找组成一个偶数最接近的两个素数

简介: 华为机试HJ60:查找组成一个偶数最接近的两个素数

题目描述:

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

本题含有多组样例输入。

输入描述:

输入一个偶数

输出描述:

输出两个素数

示例:

输入:

20


输出:

7

13

解题思路:

本题用isPrime函数判断数字是否为素数;输入一个偶数后,将比其小的所有素数放置在primes容器中;双循环遍历容器,当任两个数和为该偶数时,判断两数间距是否小于当前最小值,若符合条件,赋值给result的first和second,同时刷新最小值;遍历完成后输出result,完成。

测试代码:

#include <iostream>
#include <vector>
using namespace std;
bool isPrime(int num)
{
    for(int i=2;i<num;++i)
    {
        if(num%i==0)
            return false;
    }
    // 素数只有1和其本身是因数
    return true;
}
int main()
{
    int number;
    while(cin>>number)
    {
        vector<int> primes;
        for(int i=2;i<number;++i)
        {
            if(isPrime(i))
                primes.push_back(i);
        }
        pair<int, int > result;
        int min=9999;
        for(int i=0;i<primes.size();++i)
        {
            for(int j=i;j<primes.size();++j)
            {
                if(((primes[i]+primes[j])==number)&&((primes[j]-primes[i])<min))
                {
                    result.first=i;
                    result.second=j;
                    min=primes[j]-primes[i];
                }
            }
        }
        cout<<primes[result.first]<<endl<<primes[result.second]<<endl;
    }
    return 0;
}


相关文章
|
7月前
【每日一题Day221】LC2455可被三整除的偶数的平均值 | 模拟
【每日一题Day221】LC2455可被三整除的偶数的平均值 | 模拟
55 0
|
2月前
lanqiao OJ k倍区间
lanqiao OJ k倍区间
13 0
华为机试HJ106:字符逆序
华为机试HJ106:字符逆序
127 1
|
人工智能 算法 测试技术
华为机试HJ52:计算字符串的距离(动态规划)
华为机试HJ52:计算字符串的距离(动态规划)
华为机试HJ65:查找两个字符串a,b中的最长公共子串
华为机试HJ65:查找两个字符串a,b中的最长公共子串
华为机试HJ91:走方格的方案数
华为机试HJ91:走方格的方案数
139 0
华为机试HJ56:完全数计算
华为机试HJ56:完全数计算
|
容器
华为机试HJ10:字符个数统计
华为机试HJ10:字符个数统计