Posts Tagged ‘sieve’

#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#define MX 100000
bool ver[MX]={false};
int list[MX];
void factit(int n)
{
    int lim=(int)sqrt((double)n);
    int i;
    while(!(n&1))
    {
        printf("2");
        n/=2;
        if(n>1)
        {
            printf(" x ");
        }
    }
    for(i=3;i<=lim;i+=2)
    {
        if(n==1) break;
        while(n%i==0)
        {
            printf("%d",i);
            n/=i;
            if(n>1)     printf(" x ");
        }
    }
    if(n>1) printf("%d",n);
    printf("\n");
}
int main()
{
    int n,i,j,b,c,a,m,fl;
    while(scanf("%d",&n)==1 && (m=n))
    {
        fl=0;
        printf("%d = ",m);
        if(n<0)
        {
            printf("-1 x ");
            n=-n;
        }
        factit(n);
    }
    return 0;
}



#include <cstdio>
#include <iostream>
#include<cmath>
#define MX 1000000
using namespace std;
bool ver[MX]={false};
int list[MX];
int chivo() {
    int i, j, k=0;
    list[k++]=2;
    for (i=3 ; i<=MX ; i+=2)
    {
        if (ver[i]==false)
        {
            list[k++]=i;
            for (j=3 ; i*j<=MX ; j+=2)
            {
                ver[i*j]=true;
            }
        }
    }
    for(i=4;i<=MX;i+=2)
    {
        ver[i]=true;
    }
    list[0]=2;
    return k;
}
int fact(int n)
{
       int i,cnt=1,prev=-1;
       int j=1;
       int t=(int)sqrt(n);
       for(i=list[0];i<=t;i=list[j++])
       {
         while(n % i == 0)
         {
             if(prev==-1)
             {
                 prev=i;
             }
            if(prev!=i) cnt++;
               prev=i;
               n /= i;
         }
       }
       if(n>1) cnt++;
    return cnt;
}
int main()
{
    int n,m,i,j,k,cnt;
    chivo();
    int x=MX;
    while(scanf("%d",&n)==1 && (m=n))
    {
        if(!ver[n])
            printf("%d : 1\n",n);
        else
        printf("%d : %d\n",m,fact(n));
    }


    return 0;
}