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 }