POJ 2262 Goldbach's Conjecture

这道素数的判定水题so easy ,不过还是要注意范围,不然会超时

第一次我就TLE了。。。。。

这是一开始超时的代码:

#include<iostream>//猜想:每个大于4的偶数都可以写成两个素奇数的和

#include<cstdio>

#include<cstdlib>// 6 <= n < 1000000,b-a是最大的时候

using namespace std;

int toprime(int n)

{

    for(int i=2;i<n;i++)

    {

        if(n%i==0) return 1;

        else  continue;

    }

    return 0;

}

int main()

{

    int m=1;

    while(m!=0)

    {

        cin>>m;

        for(int i=3;i<m/2;i+=2)

        {

            if(toprime(i)==0)//如果i是素数

            {

                if(toprime(m-i)==0)

                {cout<<m<<"="<<i<<"+"<<m-i<<endl;

                    break;}

                else

                    continue;

            }

        }

    }

    return 0;

}

 

这是修改之后成功通过的代码:

 

#include<cstdlib>

#include<cstdio>

#include<cstring>

#include<cmath>

using namespace std;

bool isprime ( int k )

{

    int t = sqrt ( k + 0.5 ) ;

    for ( int i = 2 ; i <= t ; i ++ )

        if ( k % i == 0 )

            return false ;

    return true ;

}

int main()

{

    int n ;

    while ( scanf ("%d", &n) , n )

    {

        int i ;

        int t = n / 2 ;

        for ( i = 3 ; i <= t ; i += 2 )

            if ( isprime ( i ) && isprime ( n - i ) )

                break ;

        printf ( "%d = %d + %d " , n , i , n - i ) ;

    }

    return 0;

}

 

嗯,就这样了。。。。。

 

原文地址:https://www.cnblogs.com/guohaoyu110/p/6343686.html