题解 P1304 【哥德巴赫猜想】

引领天下

2017-05-07 09:47:13

Solution

这题其实很简单。 首先,筛法筛一遍,打个 bool 质数表; 然后,读入 $n$,$i$ 从 $4$ 暴力到 $n$! 代码: ```cpp #include <cstdio>//标准输入输出库 int n,i=4;//直接定好 bool s[10000]={1,1};//0和1啥都不是,定1! //全局数组初值全为0 inline void a(){ for (int j=2;j<10000;j++) for (int k=j*2;k<10000;k+=j)//k=j*2省一个判断,每次+j,保证是j的倍数 s[k]=1;//既然是j的倍数,那一定是合数,标记! } int main(void){ scanf ("%d",&n); a();//预处理 for (;i<=n;i+=2){//疯狂的暴力!i+=2保证是偶数 int j=2;//继续暴力 for (;s[j]||s[i-j];j++);//s[j]||s[i-j]两个都不能是合数,如果是,继续循环 //合数为1,质数为0 printf ("%d=%d+%d\n",i,j,i-j);//输出! } } ```