描述
任意一个偶数(大于2)都可以由2个素数组成,组成偶数的2个素数有很多种情况,本题目要求输出组成指定偶数的两个素数差值最小的素数对。
数据范围:输入的数据满足 4≤n≤1000 4≤n≤1000
输入描述:
输入一个大于2的偶数
输出描述:
从小到大输出两个素数
示例1
输入:
20
复制输出:
7 13
复制
示例2
输入:
4
复制输出:
2 2
#include<string.h>
#include <iostream>
#include<math.h>
#include<algorithm>
using namespace std;
bool IsPrime(int x) {
if (x <= 1)return false;
int sqr = (int)sqrt(1.0 * x);
for (int i = 2; i <= sqr; i++)
if (x % i == 0)return false;
return true;
}
int main() {
int n;
while (cin >> n) {
int arr[n][2];
memset(arr, 0, n * 2);
int j = 0;
for (int i = 2; i < n; i++) {
if (IsPrime(i)) {
if (IsPrime(n - i)) {
arr[j][0] = i;
arr[j][1] = n - i;
j++;
}
}
}
int len = j;
/*
for(int j=0;j<len;j++){
cout<<arr[j][0]<<" "<<arr[j][1]<<endl;
}
*/
int diffValue[len];
memset(diffValue, 0, len);
int diffValue1[len];
memset(diffValue1, 0, len);
for (int k = 0; k < len; k++) {
diffValue[k] = abs(arr[k][1] - arr[k][0]);
}
for (int l = 0; l < len; l++) {
diffValue1[l] = diffValue[l];
}
//递增
sort(diffValue1, diffValue1 + len);
/* for(int j=0;j<len;j++){
cout<<diffValue1[j]<<" ";
}
cout<<endl;
*/
for (int i = 0; i < len; i++) {
// cout<<"d0:"<<diffValue1[0]<<endl;
if (diffValue1[0] == diffValue[i]) {
if (arr[i][0] <= arr[i][1])
cout << arr[i][0] << endl << arr[i][1] << endl;
// else if (arr[i][0] > arr[i][1]) {
// cout << arr[i][1] << endl << arr[i][0] << endl;
//}
}
}
}
}
// 64 位输出请用 printf("%lld")
该程序用于找出给定偶数由两个素数相加形成的情况中,差值最小的素数对。它遍历2到n-1的所有数,检查它们是否为素数,并与n-i进行素数检验,然后存储差值最小的素数对。
394

被折叠的 条评论
为什么被折叠?



