求救,为什么#2,#9,#10超时

P1304 哥德巴赫猜想

你pd函数for循环应该是for(int i=2;i*i<=a;i++) 这样枚举到根号 a 才不会超时。
by 13245zy @ 2023-05-14 16:57:08


判断n是不是质数只要到sqrt(n)就可以了 呃。。。虽然只能多过一个点
by sjy_2023 @ 2023-05-14 16:59:07


首先你的判断质数时间复杂度不对,应该把循环改成 `for (int i = 2; i * i <= a; i ++ )`。 其次,你的 `sc` 函数里有两层循环,不难发现第二层循环是可以省去的,因为你要找的是 `x - i` 这个值,而这个值可以直接计算。 ```cpp int sr(int x) { for (int i = 2; i < x; i ++ ) { if (pd(i) && pd(x - i) { printf("%d=%d+%d\n", x, i, x - i); return 0; } } } ```
by 2huk @ 2023-05-14 17:02:42


建议学习 [时间复杂度](https://oi-wiki.org/basic/complexity/) 相关知识。
by 2huk @ 2023-05-14 17:04:05


哦还有 sc里面 ``` for(int i=2;i<=x/2;i++) { int j=x-i; if(pd(j)&&pd(i)) printf("%d=%d+%d\n",x,i,j); } ```
by sjy_2023 @ 2023-05-14 17:06:01


不用两重循环
by sjy_2023 @ 2023-05-14 17:06:59


感谢各位大神,已经过了
by lwm7 @ 2023-05-18 15:23:10


|