User:DevastatorIIC/RSA Factorization Program
From Wikipedia, the free encyclopedia
Programmed by Paul, Nov. 2005
Features:
- Timer
- random RSA# generator
- user inputs # of RSA#s to be generated and factored
- Primegen 2 (30% faster)
#include <iostream>
#include <ctime>
using namespace std;
int factor( unsigned int );
int getPrime( int );
unsigned int makeRSA( void );
int main() {
srand( time( 0 ) );
cout << "Enter number of iterations: ";
int a;
cin >> a;
int *RSAs = new int[ a ];
for ( int i = 0; i < a; i++ )
{
RSAs[i] = makeRSA();
}
int s = time(0); //start timer
for ( int j = 0; j < a; j++ )
factor(RSAs[j]);
int e = time(0); //end timer
cout << "It took " << e-s << " seconds to factor " << a << " products over 1 billion of two primes!\n";
system("pause");
return 0;
}
int factor( unsigned int RSA ){
int divisor = (int)sqrt( (double)RSA ); //first value is sqrt(RSA)
while ( 1 ){ //loop until something is returned
divisor = getPrime( divisor - 1 ); //find the first prime lower than sqrt(RSA)
if ( RSA % divisor == 0 ) //if evenly divisible by said prime
return divisor; //return original prime
}
}
int getPrime( int a ){
int sqr, notprime, k, m;
while ( a != 0 ){ //while a isn't zero
if ( a % 2 != 0 && a % 3 != 0 || a == 2 || a == 3 )
{
sqr = (int)sqrt( (double)a );
notprime = 0;
k = 1;
m = 6*k;
while ( (m-1) <= sqr )
{
if ( (a % (m-1) == 0) || (a % (m+1) == 0) )
{
notprime = 1;
break;
}
k++;
m = 6*k;
}
if ( notprime == 0 )
{
return a;
}
}
a--; //decrement a
}
cerr << "Error: No prime found.\n";
exit(1);
}
unsigned int makeRSA() {
int a = 31623 + rand() % 33914; //Get random number between sqrt 1 billion and 2^16 a = getPrime(a); //find prime close to it int b = 31623 + rand() % 33914; b = getPrime(b); return a*b; //return product
}

