Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- 1. Finding primes with sieve method
- 2. Prime factorization
- * */
- #include <bits/stdc++.h>
- using namespace std;
- #define N 1000005
- bool num[N];
- int primes[N];
- int total = 0;
- int divisors[500];
- int ndiv;
- void sieve()
- {
- int i, j, k;
- memset(num, true, sizeof(num));
- num[0] = num[1] = false;
- for(i = 4; i < N; i+= 2) num[i] = false;
- for(i = 3; i < N; i += 2) {
- if(num[i]) {
- k = i;
- while(k+i < N) {
- k += i;
- num[k] = false;
- }
- }
- }
- }
- void store()
- {
- for(int i = 2; i < N; i++)
- if(num[i]) primes[total++] = i;
- }
- void prime_factorize(int n) // O(log n)
- {
- ndiv = 0;
- for(int i = 0, j = sqrt(n); primes[i] <= j; i++) {
- if(n % primes[i] == 0) {
- while(n % primes[i] == 0) {
- n /= primes[i];
- divisors[ndiv++] = primes[i];
- }
- j = sqrt(n);
- }
- }
- if(n > 1) // n is prime
- divisors[ndiv++] = n;
- }
- int main()
- {
- sieve();
- store();
- //for(int i = 0; i < 100; i++)
- //cout << primes[i] << " ";
- int n = 150;
- prime_factorize(n);
- for(int i = 0; i < ndiv; i++)
- cout << divisors[i] << " ";
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment