题目地址
AC代码
#include <iostream>
int listOfPrimeNum[1000001];
using namespace std;
int main() {
for (long long int i = 2; i < 1000001; ++i) {
if(listOfPrimeNum[i]==0){
for (long long int j = i+i; j <1000001 ; j+=i) {
listOfPrimeNum[j]=1;
}
}
}
long long int temp;
while(cin>>temp,temp!=0){
for (long long int i = 3; i < temp-2; ++i) {
if(listOfPrimeNum[i]==0&&listOfPrimeNum[temp-i]==0){
cout<<temp<<" = "<<i<<" + "<<temp-i<<endl;
break;
}
}
}
return 0;
}
题解和思路
这道题反向考察筛素数的方法,现有的很多筛素数的方法你们自己试一下就行,反正106的数让你筛而已(当然你也可以直接打表,O(1)等着你//滑稽)
这里用了线性筛,把素数全部用0标记出来,根据题意再排掉2(2是素数里唯一的一个偶数)之后就得到了我们需要的表了。
因为要求B-A的差最大,我们只需要找到第一个符合条件的数对即可。