【C/C++】任意大于1的整数分解成素数因子乘积的形式

时间:2021-01-24 04:20:17

//

 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("\n");
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 }