70分,3个点TLE

P1304 哥德巴赫猜想

@[费娘爱学习](/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


|