UVa 543 Goldbach's Conjecture

#include <iostream>
#include <vector>
#include <bitset>
#include <algorithm>
using namespace std;
bitset<1000001> pr;
vector<int> a;
int main(){
    ios::sync_with_stdio(0);
    for(int i=2;i<1e6+1;i++){
        if(!pr[i]){
            a.push_back(i);
            if(i<=1e3)
                for(int j=i*i;j<1e6+1;j+=i)
                    pr[j]=1;
        }
    }
    int n;
    while(cin>>n){
        if(!n)
            return 0;
        int s=0,e=(upper_bound(a.begin(),a.end(),n)-a.begin())-1;
        int sum=a[s]+a[e];
        while(sum!=n){
            if(sum<n)
                s++;
            else
                e--;
            sum=a[s]+a[e];
        }
        cout<<n<<" = "<<a[s]<<" + "<<a[e]<<endl;
    }
}

Comments