예제 #1
0
    void pushBack_N_Primes(uint64_t n, uint64_t start)
    {
        n_ = n;
        PrimeSieve ps;
        std::size_t newSize = primes_.size() + static_cast<std::size_t>(n_);
        primes_.reserve(newSize);
        try
        {
            while (n_ > 0)
            {
                // choose stop > nth prime
                uint64_t logx = 50;
                uint64_t dist = n_ * logx + 10000;
                uint64_t stop = start + dist;

                // fix integer overflow
                if (stop < start)
                    stop = get_max_stop();

                ps.callbackPrimes(start, stop, this);
                start = stop + 1;

                if (stop >= get_max_stop())
                    throw primesieve_error("cannot generate primes > 2^64");
            }
        }
        catch (cancel_callback&) { }
    }
예제 #2
0
static PyObject* primes(PyObject* self, PyObject* args){
    Py_ssize_t start = 0, n = 0; size_t pi;
    if (!PyArg_ParseTuple(args, "n|n:primes", &start, &n)) return NULL;
    if (PyTuple_Size(args) == 1){
        n = start;
        start = 0;
    }
    if (start > n) return PyList_New(0);
    if (start < 2) start = 2;
    if (n < 3) return PyErr_Occurred() ? NULL : PyList_New(0);
    else if (n == 3){
        PyObject* just_two = PyList_New(1);
        PyList_SET_ITEM(just_two, 0, PyInt_FromLong(2));
        return just_two;
    }
    else if (n < 6)  pi = 2;
    else if (n < 8)  pi = 3;
    else if (n < 12) pi = 4;
    else if (n < 14) pi = 5;
    else if (n < 18) pi = 6;
    else             pi = n/(log(n)-1);
    size_t i = 0;
    PrimePyList primes(pi, &i);
    PrimeSieve ps;
    ps.generatePrimes(start, n-1, &primes);
    i--;
    while (i < --pi) PyObject_CallMethod(primes.list, (char*)"__delitem__", (char*)"(n)", pi);
    return primes.list;
}
예제 #3
0
 void pushBackPrimes(uint64_t start, uint64_t stop)
 {
     if (start <= stop)
     {
         std::size_t prime_count = approximate_prime_count(start, stop);
         primes_.reserve(primes_.size() + prime_count);
         PrimeSieve ps;
         ps.callbackPrimes(start, stop, this);
     }
 }
예제 #4
0
파일: RSA.cpp 프로젝트: santoshF/RSA
int main(){
	
	//Initialize Seed
	srand(time (NULL) );	
	//Create Random Start from range 0 to 99
	int start = rand () % 99 + 1 ;
	//Create Random Stop from range 999 to 99999 (Nighty - Nine Thousand )	
	int stop =  rand () % 99999  + 999 ;
	
	cout<<"Random start "<<start <<endl;
	cout<<"Random end " <<stop <<endl;

	PrimeSieve ps;
	try
	{
		ps.generatePrimes(start ,stop ,callback);
	 //	ps.printPrimes(start ,stop );

	}catch (stop_primesieve & e  ){
	//cerr << " Error " << e.what() <<endl; 
	}
	//Random Number
	int  num1  =  rand() % 99 + 1 ; 	
	int  num2  =  rand() % 500 +  100;

	 //P and Q are 2 large random number
	long long unsigned  int  p = primes[num1];
	long long unsigned int  q = primes[num2];

	 //Calculate n
	long long unsigned int n = p * q;
	
	//Calculate phi
	long long unsigned int phi = (p -1 ) * (q -1);

	//Calculate e s.t. 
	
	cout << " num1 =	" << num1 <<endl;	
	cout << " num2 =	" << num2 <<endl;	
	cout << " p =	" << p <<endl;	
	cout << " q =	" << q <<endl;	
	cout << " n =	" << n <<endl;	
	cout << " phi =  "<< phi <<endl;	

	euclid(a,b);	

return 0;
}
예제 #5
0
 void pushBack_N_Primes(uint64_t n, uint64_t start)
 {
   n_ = n;
   std::size_t newSize = primes_.size() + static_cast<std::size_t>(n_);
   primes_.reserve(newSize);
   PrimeSieve ps;
   try
   {
     while (n_ > 0)
     {
       uint64_t logn = 50;
       // choose stop > nth prime
       uint64_t stop = start + n_ * logn + 10000;
       ps.callbackPrimes(start, stop, this);
       start = stop + 1;
     }
   }
   catch (cancel_callback&) { }
 }
예제 #6
0
IntVec PrimeSwing::GetMultiplies( int _number, PrimeSieve& _sieve )
{
    IntVec multiplies;
    int sqrtN = static_cast<int>( sqrt( static_cast<double>(_number) ) );

    int maxIdx = _sieve.GetPrimeIndex( sqrtN, 2, _sieve.GetNumberOfPrimes() );
    for ( int i = 1; i < maxIdx; ++i )
    {
        int prime = _sieve.GetPrime(i);

        int q = _number, p = 1;

        while ((q /= prime) > 0)
            if ((q & 1) == 1)
                p *= prime;

        if (p > 1)
            multiplies.push_back(p);
    }

    int minIdx = maxIdx;
    maxIdx = _sieve.GetPrimeIndex( _number / 3, minIdx, _sieve.GetNumberOfPrimes() );

    for (int i = minIdx; i < maxIdx; ++i)
    {
        int prime = _sieve.GetPrime(i);

        if (((_number / prime) & 1) == 1)
            multiplies.push_back(prime);
    }

    return multiplies;
}
예제 #7
0
mpz_class PrimeSwing::Swing( int _number, PrimeSieve& _sieve )
{
    // Small precalculated values
    if (_number < 33)
        return smallOddSwing[_number];

    // Fetch multiplies
    IntVec multiplies = GetMultiplies(_number, _sieve);

    // Return multiplies of primorials
    return _sieve.Primorial(_number / 2, _number) *
           UtilityFunctions::SequenceProduct( multiplies.begin(), multiplies.end() );
}
예제 #8
0
static PyObject* primes_nth(PyObject* self, PyObject* args){
    Py_ssize_t n = 0;
    if (!PyArg_ParseTuple(args, "n:primes_nth", &n)) return NULL;
    if (n < 1){
        PyErr_SetString(PyExc_ValueError, "a positive integer is required");
        return NULL;
    }
    switch (n){
        case 1: return PyInt_FromLong(2);
        case 2: return PyInt_FromLong(3);
        case 3: return PyInt_FromLong(5);
        case 4: return PyInt_FromLong(7);
        case 5: return PyInt_FromLong(11);
    }
    NthPrime nthprime(n);
    PrimeSieve ps;
    try {
        ps.generatePrimes(0, n*log(n*log(n)), &nthprime);
    }
    catch (StopPrimeGeneration&) {}
    return nthprime.prime;
}
예제 #9
0
uint64_t count_sextuplets(uint64_t start, uint64_t stop)
{
  PrimeSieve ps;
  ps.setSieveSize(get_sieve_size());
  return ps.countSextuplets(start, stop);
}
예제 #10
0
uint64_t count_twins(uint64_t start, uint64_t stop)
{
  PrimeSieve ps;
  ps.setSieveSize(get_sieve_size());
  return ps.countTwins(start, stop);
}
예제 #11
0
uint64_t nth_prime(int64_t n, uint64_t start)
{
  PrimeSieve ps;
  ps.setSieveSize(get_sieve_size());
  return ps.nthPrime(n, start);
}
예제 #12
0
void callback_primes(uint64_t start, uint64_t stop, Callback<uint64_t>* callback)
{
  PrimeSieve ps;
  ps.setSieveSize(get_sieve_size());
  ps.callbackPrimes(start, stop, callback);
}
예제 #13
0
void print_sextuplets(uint64_t start, uint64_t stop)
{
  PrimeSieve ps;
  ps.setSieveSize(get_sieve_size());
  ps.printSextuplets(start, stop);
}
예제 #14
0
void print_twins(uint64_t start, uint64_t stop)
{
  PrimeSieve ps;
  ps.setSieveSize(get_sieve_size());
  ps.printTwins(start, stop);
}