#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; }
Posts Tagged ‘sieve’
583 – Prime Factor
Posted: November 8, 2011 in ACM, Number TheoryTags: ACM, number theory, prime factorization, primes, sieve, trial division., UVA Solution
0
10699 – Count the factors
Posted: November 5, 2011 in ACM, MathTags: math, number theory, primes, sieve, trial division.
#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; }