7和10 WA,请高手指点!!

P1579 哥德巴赫猜想(升级版)

hanrui_l @ 2018-05-11 11:18:55

//思路:先找到第三个质数(最大的),根据输入数与第三个质数的差去找前两个质数(前两个质数的和==差),找到的两个质数必然是最小的。

include <iostream>

#include <cmath>
using namespace std;
bool susu(int m)
 {
  if(m==1) return 0;
  for(int i=2;i<=sqrt(m);i++)
  {
    if(m%i==0) return 0;
  }
return 1;
}
int main()
{
int n;
cin>>n;
for(int i=n-1;i>9;i--) //找n下面最大的质数开始判断
 {
  if(susu(i)) 
   {
    int p=n-i;
    if(p>3 && p%2==0) //前两个质数的和必然是偶数,且最小是4
     {
      for(int j=2;j<p;j++)
       {
        for(int k=j;k<=p-j;k++) 
         {
          if(susu(j)&&susu(k)                            &&n==i+j+k)
          {
            cout<<j<<" "<<k<<" "<<i;
            return 0;
          }
         }
        }
       }
     }
  }
return 0;

}


by 准点的星辰 @ 2018-05-16 18:52:47

什么??我们都是先找两个最小的素数,然后减出来第三个,在判断是否为素数。


by hanrui_l @ 2018-05-16 20:41:35

觉得这个思路应该是对的啊: 1.若输入的数为n,先找到小于n的最大的那个质数x; 2.求n-x,设y=n-x吧; 3.然后从最小质数开始找,找到两个质数的和是等于y的,如果能找到,那么这两个质数一定是最小的两个质数;(前提是y一定>=4) 4.如果找不到,就回到第1步,找离n最近的第2个质数,这样一直循环下去,直到找到符合条件的最大质数; 这样通过差值来找,要比一开始就从最小的质数找起来要快很多吧? 不直到问题处在哪里?


by 风水戏诸侯 @ 2019-01-16 23:58:13

第10个 in: 19813 out:3 17 19793


|