题解 | 查找组成一个偶数最接近的两个素数
查找组成一个偶数最接近的两个素数
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")