题解 P1579 【哥德巴赫猜想(升级版)】
蒟蒻AC代码,讲解请看题解中.
1 #include<bits/stdc++.h> 2 #include<iostream> 3 #include<cmath> //头文件 4 5 using namespace std;//开辟名称空间 6 7 int tst,k,b[20005];//定义,其中b[20005]用来装所有质数 8 9 int main() 10 { 11 cin>>tst;//输入 12 //==============================下面部分用来生成质数表 13 int i, n; 14 for (n = 2; n <=20000; n++) 15 { 16 for (i = 2; i <= sqrt(n); i++)//sqrt用来增快速度 17 if (n%i == 0) 18 break; 19 if (i>sqrt(n)){b[k]=n;k++;}//k有两个作用1.是不让b数组出现有0。2.找到20000以内质数的个数 20 } 21 //==============================上面部分用来生成质数表 22 23 for(int i=0;i<k-1;i++)//判断第一个数因为要求尽量小所以加加,另外k(质数的个数)要减一因为是从0开始的 24 { 25 for(int j=0;j<k-1;j++)//判断第二个数因为要求尽量小所以加加,另外k(质数的个数)要减一因为是从0开始的 26 { 27 for(int aaa=k-1;aaa>=0;aaa--)//判断第三个数因为要求尽量大所以减减,另外k(质数的个数)要减一因为是从0开始的 28 { 29 if(b[i]+b[j]+b[aaa]==tst)//假如满足条件 30 { 31 cout<<b[i]<<' '<<b[j]<<' '<<b[aaa]<<endl;//输出 32 return 0;//因为已经找到最佳条件,所以直接退出循环 33 } 34 } 35 36 } 37 } 38 return 0;//这里其实不必,因为输入的数一定是个大于10的奇数,所以会在循环里退出 39 }
作者:BiuBiu_Miku
-----------------------------------------------
个性签名:天生我材必有用,千金散尽还复来!
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!
万水千山总是情,打赏一分行不行,所以如果你心情还比较高兴,也是可以扫码打赏博主,哈哈哈(っ•̀ω•́)っ✎⁾⁾!