新手请教大佬

P1304 哥德巴赫猜想

for (int j = 2; j <= n / 2; i++) 死循环?
by 幽云蓝 @ 2020-08-08 08:04:31


@[爵士](/user/246979) 至少应该不会TLE了
by SalomeJLQ @ 2020-08-08 08:13:26


@[jimmyshi29](/user/225837)
by SalomeJLQ @ 2020-08-08 08:13:40


```cpp #include<bits/stdc++.h> using namespace std; bool p[100010]; void getprime(){ memset(p,true,sizeof(p)); p[0]=p[1]=false; for(int i=2;i<=40000;i++) if (p[i]) for(int j=2;i*j<=40000;j++){p[i*j]=false;break;} return; } int main(){ getprime(); int n;cin>>n; for(int i=2;i<=n;i+=2) for(int j=2;j<=n/2;j++) for(int k=2;k<=n/2;k++) if(p[j] && p[k])cout <<i<<'='<<j<<'+'<<k<<endl; return 0; } ``` 这样就好了
by SalomeJLQ @ 2020-08-08 08:14:15


这回是五个点TLE,五个点WA ``` # include <iostream> # include <cstring> using namespace std; bool p[100010]; void getprime() { memset(p, true, sizeof(p)); p[0] = p[1] = false; for (int i = 2; i <= 40000; i++) { if (p[i]) { for (int j = 2; i * j <= 40000; j++) { p[i * j] = false; break; } } } return; } int main() { getprime(); int n; cin >> n; for (int i = 2; i <= n; i += 2) { for (int j = 2; j <= n / 2; j++) { for (int k = 2; k <= n / 2; k++) { if (p[j] && p[k]) cout << i << '=' << j << '+' << k << endl; } } } return 0; } ```
by jimmyshi29 @ 2020-08-08 09:08:16


|