//
1 #include<stdio.h> 2 #include<math.h> 3 #include<malloc.h> 4 int isprime(long n); 5 void decompose_to_primes(int n); 6 int main() 7 { 8 decompose_to_primes(3); 9 return 0; 10 } 11 12 void decompose_to_primes(int n) 13 { 14 int num; 15 int *prime[2]; 16 int pi=0; 17 int temp,i,j,exp; 18 temp=(int)sqrt(n); 19 num=temp; 20 prime[0]=(int*)malloc(num*sizeof(int)); 21 prime[1]=(int*)malloc(num*sizeof(int)); 22 if(n<4)// n==2 or n==3 23 {prime[0][0]=n;prime[1][0]=1;pi++;} 24 for(i=2;i<=temp;i++) 25 if(isprime(i)) 26 { 27 exp=0; 28 j=i; 29 while(n%j==0 && j<=n) 30 {exp++;j*=i;} 31 j/=i; 32 //if(exp) 33 {prime[0][pi]=i;prime[1][pi]=exp; 34 pi++; 35 n/=j; 36 } 37 } 38 //output primefactors whose exp!=0 39 for(i=0;i<pi;i++) 40 if(prime[1][i]!=0) 41 printf("<%d,%d> ",prime[0][i],prime[1][i]); 42 printf(" "); 43 free(prime[0]); 44 free(prime[1]); 45 } 46 47 int isprime(long n) 48 { 49 int bound; 50 int i; 51 bound=(int)sqrt(n); 52 for(i=2;i<=bound;i++) 53 if(n%i==0) 54 return 0; 55 return 1; 56 }