优化思路:因为差值最小的两个数一定集中在中间,所以可以直接从中间开始分奇数个和偶数个来讨论
#include <iostream> using namespace std; int isPrime(int num){ for(int i=2;i*i<=num;i++){ if(num%i==0) return false; } return true; } int main() { int n; while(cin>>n){ int min=n; int ans1,ans2; for(int i=2;i<=n/2;i++){ for(int j=n-i;j>=i;j--){ if(i+j==n&&isPrime(i)&&isPrime(j)){ if(j-i<min){ ans1=i; ans2=j; min=j-i; break; } } } } cout<<ans1<<endl; cout<<ans2<<endl; } } // 64 位输出请用 printf("%lld")