质因子分解

Date:2019-07-08 18:56:02

算法实现

 1 /*
 2 Data: 2019-05-02 21:00:39
 3 Problem:
 4 */
 5 
 6 //默认给定整数大于1,若遇到1的情况可以特判
 7 
 8 struct factor
 9 {
10     int x;  //质因子
11     int t;  //次数
12 }fac[10];       //int范围内,最多有9个不同的素数相乘
13 int pt=0;
14 /*
15 有如下定理:
16     任给整数n,如果存在[2,n]范围内的质因子
17     1.这些质因子全部小于等于sqrt(n)
18     2.有且仅有一个质因子大于sqrt(n)
19 */
20 
21 //枚举2~sqrt(n)范围内的所有素数,判断其是否是n的因子
22 for(int i=2; i<=sqrt(n); i++)
23 {   //O(n^1/2)
24     if(isPrime[i] && n%i==0)
25     {
26         fac[pt].x = i;
27         fac[pt].t = 0;
28         while(n%i == 0)
29         {
30             fac[pt].t++;        //计算该质因子的个数
31             n /= i;
32         }
33         pt++;
34     }
35 }
36 
37 if(n!=1)
38 {
39     fac[pt].x=n;        //存在大于sqrt(n)的质因子,此时n的值即为该质因子
40     fac[pt++].t=1;      //令其个数为1
41 }

 

posted @ 2019-07-08 18:57  林東雨  阅读(363)  评论(0编辑  收藏  举报