UVA Problem( Goldbach’s Conjecture (II) ) 686 Solution

Problem Solving, UVa

#include <stdio.h>

#include<iostream>

#include<math.h>

using namespace std;

bool flag[20000005];

int primes[20000000];

int cnt;



void sieve(int n)

{

cnt=0;

primes[cnt++] = 2;

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

{

if(flag[i] == 0)

{

primes[cnt++] = i;

if(i <= n/i)

{

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

flag[j] = 1;

}

}

}



return ;

}





int main()

{



    int n,i,j,count,l,c;

    sieve(33000);

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

    {

        if(n==0)

            break;

        count=0;

        c =0;

       

        for(i=0; i<cnt; i++)

        {

            for(j=0; j<cnt; j++)

            {

                if(primes[i]==primes[j]&& primes[i]+primes[j]==n)

                {

                    c++;

                }

                else if(primes[i]+primes[j]==n)

                {

                    count++;

                }

               

                if(primes[i]+primes[j]>n)

                    break;

            }

        }

        count = count/2 +c;

        printf("%d\n",count);

   

    }

    return 0;

}

 

0 Comments

You may find interest following article