#include <iostream>
#include <list> // from stackoverflow.com/q/55022028/849891
#include <cmath> // by stackoverflow.com/users/9434763/apoorva-raju
#include <ctime> // tweaked by stackoverflow.com/users/849891/will-ness
using namespace std;
/*
check_prime__list:
time taken No of divisions No of primes
10M: 0.873 seconds 286144936 664579
20M: 2.169 seconds 721544444 1270607
(2.5x) (2.5x) (log 2.5 / log 2 = 1.32)
(2B: over 2.169*100**1.32/60 = 16 minutes)
check_prime__nums:
time taken No of divisions No of primes
10M: 4.650 seconds 1746210131 664579
20M: 12.585 seconds 4677014576 1270607
(2.7x) (2.7x) (log 2.7 / log 2 = 1.43)
(2B: over 12.585*100**1.43/3600 = 2.5 hours)
*/
list<long long> primeno;
long int noofdiv = 0; /// LONG!!!! was wrapping-around with INT, #@%$&$#
void ListPrimeNumber();
int no_primes = 3;
int main()
{
clock_t time_req = clock();
ListPrimeNumber();
time_req = clock() - time_req;
cout << "\ntime taken " << static_cast<float>(time_req) / CLOCKS_PER_SEC << " seconds";
cout << "\nNo of divisions : " << noofdiv;
cout << "\nNo of primes : " << no_primes;
return 0;
}
void check_prime(int i);
void ListPrimeNumber()
{
primeno.push_back(2);
primeno.push_back(3);
primeno.push_back(5);
for (long long i = 6; i <= 10000000; i++)
{
check_prime(i);
}
}
void check_prime(int i) // __list
{
try
{
int limit = sqrt(i);
for (int iter : primeno)
{
if (iter > limit)
{
primeno.push_back(i);
++no_primes;
break;
}
else if ( (++noofdiv , (i % iter) == 0) )
{
break;
}
}
}
catch (exception ex)
{
std::cout << "Message";
}
}
void check_prime__nums(int i)
{
try
{
int j = 0;
int limit = sqrt(i);
for (j = 2 ; j <= limit;j++)
{
if( (++noofdiv , (i % j) == 0) )
{
break;
}
}
if( j > limit)
{
primeno.push_back(i);
++no_primes;
}
}
catch (exception ex)
{
std::cout << "Message";
}
}