@[费娘爱学习](/user/199273)
```cpp
#include<bits/stdc++.h>
using namespace std;
bool o[1001005];
int n;
int z[1001005],top=0,x;
int main(){
memset(o,true,sizeof(o));
n=1000000;
for(int i=2;i<=n+1;i++){
if(o[i]==true){ z[++top]=i;}
x=0;
do{
x++;
if(i*z[x]>n+10)break;
o[i*z[x]]=0;
}while(i%z[x]!=0&&x<top);
}
scanf("%d",&n);
int nn=4;
while(nn!=n+2){
for(int i=2;i<=nn/2+2;i++){
if(o[i]==1&&o[nn-i]==1){
if(nn-i==1)i=1;
cout<<nn<<"="<<i<<"+"<<nn-i<<endl;
break;}
}
nn+=2;
}
return 0;
}
```
by 天南星魔芋 @ 2020-10-28 18:21:03
如果等于二时你的素数判断就为false了
by wwlcs @ 2020-10-30 22:35:51
函数优化下,<sqrt(n)
by wwlcs @ 2020-10-30 22:39:23
附上我的代码,仅供参考。
```
#include <bits/stdc++.h>
using namespace std;
int zspd (int shu)
{
for (int i=2; i*i<=shu; i++)
{
if (shu%i==0) return false;
}
return true;
}
int main()
{
int n;
cin>>n;
for (int i=4; i<=n; i+=2)
{
for (int j=2; j<=i-1; j++)
{
if (zspd (j)&&zspd (i-j)) { cout<<i<<"="<<j<<"+"<<i-j<<endl; break; }
}
}
return 0;
}
```
by kevin_max @ 2020-11-06 19:54:50