1. 程式人生 > >查詢組成一個偶數最接近的兩個素數/華為機試(C/C++)

查詢組成一個偶數最接近的兩個素數/華為機試(C/C++)

題目描述

任意一個偶數(大於2)都可以由2個素陣列成,組成偶數的2個素數有很多種情況,本題目要求輸出組成指定偶數的兩個素數差值最小的素數對

輸入描述:

輸入一個偶數

輸出描述:

輸出兩個素數

示例1

輸入

20

輸出

7
13

程式碼:

//第五十八題  查詢組成一個偶數最接近的兩個素數
#include<iostream>
using namespace std;
bool PrimeNumber(int n)
{
	for (int i = 2; i < n; i++)
		if ((n - n / i*i) == 0)
			return false;
	return true;
}
int main()
{
	int n;
	while (cin >> n)
	{
		if ((n & 1) || n<3)
			continue;
		int bn = n >> 1;
		int bnL = bn;
		int bnR = bn;
		for (int i = bnL; i > 1; i--)
		{
			if (PrimeNumber(i))
			{
				bnL = i;
				break;
			}
		}
		for (int i = bnR; i < n; i++)
		{
			if (PrimeNumber(i))
			{
				bnR = i;
				break;
			}
		}
		int total = bnL + bnR;
		while (total != n)
		{
			if (total < n)
			{
				for (int i = bnR+1; i < n; i++)
				{
					if (PrimeNumber(i))
					{
						bnR = i;
						break;
					}
				}
			}
			else
			{
				for (int i = bnL-1; i > 1; i--)
				{
					if (PrimeNumber(i))
					{
						bnL = i;
						break;
					}
				}
			}
			total = bnL + bnR;
		}
		cout << bnL << endl << bnR << endl;
	}
	return 0;
}