あなたには殺す価値がない…愚かな弟よ…私を殺そうとするなら…憎しみ!憎め!そして醜く生きろ!逃げよう、逃げよう、そして生きていこう!

题解 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 } 

 

posted @ 2020-02-01 16:59  BiuBiu_Miku  阅读(175)  评论(0编辑  收藏  举报
骗分过样例,暴力出奇迹!