fork download
  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4.  
  5. class SumTwoPrimes
  6. {
  7. private:
  8. size_t n;
  9. vector<size_t> primes,lows;
  10. public:
  11. SumTwoPrimes(size_t n):n(n)
  12. {
  13. PrimesOver2();
  14. SumPrimes();
  15. primes.resize(0);
  16. }
  17. size_t oposite(size_t p)const { return n-p; }
  18. const vector<size_t> &list()const { return lows; }
  19. protected:
  20. void PrimesOver2()
  21. {
  22. vector<bool> bin(n+1);
  23. for(size_t i=3;i<=n;i+=2)
  24. {
  25. if(!bin[i])
  26. {
  27. primes.push_back(i);
  28. for(size_t k=i<<1;k<=n;k+=i) bin[k]=true;
  29. }
  30. }
  31. }
  32. void SumPrimes()
  33. {
  34. for(int fr=0,bk=primes.size()-1;fr<=bk;)
  35. {
  36. size_t pfr=primes[fr],sum=pfr+primes[bk];
  37. if(sum>n) --bk;
  38. else if(sum<n) ++fr;
  39. else
  40. {
  41. lows.push_back(pfr);
  42. ++fr;
  43. --bk;
  44. }
  45. }
  46. }
  47. };
  48.  
  49. int main()
  50. {
  51. SumTwoPrimes stp(1000);
  52. for(auto p:stp.list()) cout<<p<<" + "<<stp.oposite(p)<<endl;
  53. return 0;
  54. }
Success #stdin #stdout 0s 4180KB
stdin
Standard input is empty
stdout
3 + 997
17 + 983
23 + 977
29 + 971
47 + 953
53 + 947
59 + 941
71 + 929
89 + 911
113 + 887
137 + 863
173 + 827
179 + 821
191 + 809
227 + 773
239 + 761
257 + 743
281 + 719
317 + 683
347 + 653
353 + 647
359 + 641
383 + 617
401 + 599
431 + 569
443 + 557
479 + 521
491 + 509