质因子分解
Posted blue-lin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了质因子分解相关的知识,希望对你有一定的参考价值。
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
以上是关于质因子分解的主要内容,如果未能解决你的问题,请参考以下文章