题解 | 查找组成一个偶数最接近的两个素数
查找组成一个偶数最接近的两个素数
https://www.nowcoder.com/practice/f8538f9ae3f1484fb137789dec6eedb9
#include <climits>
#include <iostream>
#include <linux/limits.h>
#include<vector>
#include<climits>
using namespace std;
bool isprime(int n) {
if (n <= 1) return false;
if (n <= 3) return true;
if (n % 2 == 0 || n % 3 == 0) return false;
for (int i = 5; i * i <= n; i += 6) {
if (n % i == 0 || n % (i + 2) == 0) return false;
}//除去2和3,质数必为6k+1或6k-1的形式,非2,3倍数的其他这类6k+-1的数只要不是比它小的质数的倍数即可,并且只用检查到根号n。
return true;
}
int main() {
int n;
cin>>n;
vector<int> A,B;
if (isprime(n-2)) {
A.push_back(2);
B.push_back(n-2);
}
if (isprime(n-3)) {
A.push_back(3);
B.push_back(n-3);
}
for(int i = 1; (6*i - 1) <= (n/2) ; i++){
if(isprime(6*i-1)){
if(isprime(n-6*i+1)){
A.push_back(6*i-1);
B.push_back(n-6*i+1);
}
}
if(isprime(6*i+1)){
if(isprime(n-1-6*i)){
A.push_back(6*i+1);
B.push_back(n-1-6*i);
}
}
}
int y =INT_MAX;
int num = 0;
for(int j = 0 ;j<A.size() ;j++ ){
if(y > abs((A[j]-B[j]))){
y = abs((A[j]-B[j]));
num = j ;
}
}
cout<<min(A[num],B[num])<<endl;
cout<<max(A[num],B[num])<<endl;
}
// 64 位输出请用 printf("%lld")

