UVA Problem 583( Prime Factors ) Solution

Problem Solving, UVa

#include<bits/stdc++.h>

bool flag[20000005];

int List[100000],primes[100000];

int listSize,cnt;  

using namespace std;





void sieve(int n)

{

   

cnt=0;

primes[cnt++] = 2;

for(int i=3; i<=n; i+=2)

{

if(flag[i] == 0)

{

primes[cnt++] = i;

if(i <= n/i)

{

for(int j=i*i; j<=n; j+=i*2)

flag[j] = 1;

}

}

}



return ;

}



void primeFactorize( int n )

 {

    listSize = 0;  

    

  

    for( int i = 0;i<cnt and primes[i]<=(int)sqrt(n);i++ )

    {

        if( n % primes[i] == 0 )

        {

            while( n % primes[i] == 0 )

             {

                

                n /= primes[i];

               

                List[listSize] = primes[i];

                listSize++;

            }

           

        }

    }

   

    if( n > 1 )

    {

       

        List[listSize] = n;

        listSize++;

    }

   

    return ;

}

int main()

{

    int n;

 sieve(50000);

    while(cin>>n) {

       // scanf("%d", &n);

       //printf(n < 0? "%d = -1 x " : "%d = ", n);

        if(n == 0) break;

        primeFactorize(fabs(n));

        printf(n < 0? "%d = -1 x %d" : "%d = %d", n, List[0]);

        for(int i = 1; i < listSize; i++)

            printf(" x %d", List[i]);

        printf("\n");

   

}



    return 0;

}

 

0 Comments

You may find interest following article