Merge pull request #57 from akhem301/master

Prime Factorization of a number
This commit is contained in:
Christian Bender
2017-12-23 22:51:16 +01:00
committed by GitHub
2 changed files with 81 additions and 0 deletions

View File

@@ -0,0 +1,10 @@
Prime Factorization is a very important and useful technique to factorize any number into its prime factors. It has various applications in the field of number theory.
The method of prime factorization involves two function calls.
First: Calculating all the prime number up till a certain range using the standard
Sieve of Eratosthenes.
Second: Using the prime numbers to reduce the the given number and thus find all its prime factors.
The complexity of the solution involves approx. O(n logn) in calculating sieve of eratosthenes
O(log n) in calculating the prime factors of the number. So in total approx. O(n logn).

View File

@@ -0,0 +1,71 @@
#include <bits/stdc++.h>
using namespace std;
// Declaring variables for maintaing prime numbers and to check whether a number is prime or not
bool isprime[1000006];
vector<int> prime_numbers;
vector<pair<int,int> > factors;
// Calculating prime number upto a given range
void SieveOfEratosthenes(int N)
{
memset(isprime, true, sizeof isprime);
for(int i=2; i<=N ;i++)
{
if(isprime[i])
{
for(int j=2*i; j<=N; j+=i)
isprime[j]=false;
}
}
for(int i=2;i<=N;i++)
{
if(isprime[i])
prime_numbers.push_back(i);
}
return;
}
// Prime factorization of a number
void prime_factorization(int num)
{
for(int i=0; prime_numbers[i]<=num; i++)
{
int count=0;
while(num%prime_numbers[i] == 0)
{
count++;
num = num/prime_numbers[i];
}
if(count)
factors.push_back(make_pair(prime_numbers[i],count));
}
if(num>2)
factors.push_back(make_pair(num,1));
return;
}
int main()
{
int num;
cin>>num;
SieveOfEratosthenes(num);
prime_factorization(num);
// Prime factors with their powers in the given number in new line
for(auto it: factors)
{
cout<<it.first<<" "<<it.second<<endl;
}
return 0;
}