Equal prime and composite sums: Difference between revisions

Added C++ solution
m (→‎{{header|Phix}}: slightly simpler and faster (no need for that +3))
(Added C++ solution)
Line 31:
 
 
 
=={{header|C++}}==
{{libheader|Primesieve}}
<lang cpp>#include <primesieve.hpp>
 
#include <chrono>
#include <iomanip>
#include <iostream>
#include <locale>
 
class composite_iterator {
public:
composite_iterator();
uint64_t next_composite();
 
private:
uint64_t composite;
uint64_t prime;
primesieve::iterator pi;
};
 
composite_iterator::composite_iterator() {
composite = prime = pi.next_prime();
for (; composite == prime; ++composite)
prime = pi.next_prime();
}
 
uint64_t composite_iterator::next_composite() {
uint64_t result = composite;
while (++composite == prime)
prime = pi.next_prime();
return result;
}
 
int main() {
std::cout.imbue(std::locale(""));
auto start = std::chrono::high_resolution_clock::now();
composite_iterator ci;
primesieve::iterator pi;
uint64_t prime_sum = pi.next_prime();
uint64_t composite_sum = ci.next_composite();
uint64_t prime_index = 1, composite_index = 1;
std::cout << "Sum | Prime Index | Composite Index\n";
std::cout << "------------------------------------------------------\n";
for (int count = 0; count < 11;) {
if (prime_sum == composite_sum) {
std::cout << std::right << std::setw(21) << prime_sum << " | "
<< std::setw(12) << prime_index << " | " << std::setw(15)
<< composite_index << '\n';
composite_sum += ci.next_composite();
prime_sum += pi.next_prime();
++prime_index;
++composite_index;
++count;
} else if (prime_sum < composite_sum) {
prime_sum += pi.next_prime();
++prime_index;
} else {
composite_sum += ci.next_composite();
++composite_index;
}
}
auto end = std::chrono::high_resolution_clock::now();
std::chrono::duration<double> duration(end - start);
std::cout << "\nElapsed time: " << duration.count() << " seconds\n";
}</lang>
 
{{out}}
<pre>
Sum | Prime Index | Composite Index
------------------------------------------------------
10 | 3 | 2
1,988 | 33 | 51
14,697 | 80 | 147
83,292 | 175 | 361
1,503,397 | 660 | 1,582
18,859,052 | 2,143 | 5,699
93,952,013 | 4,556 | 12,821
89,171,409,882 | 118,785 | 403,341
9,646,383,703,961 | 1,131,142 | 4,229,425
209,456,854,921,713 | 5,012,372 | 19,786,181
3,950,430,820,867,201 | 20,840,220 | 86,192,660
 
Elapsed time: 0.330966 seconds
</pre>
 
=={{header|F_Sharp|F#}}==
1,777

edits