题目描述:
任意一个偶数(大于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; }