5.5 质因数分解
http://codeup.hustoj.com/contest.php?cid=100000592
E 完数与盈数
题目解析
⚠️完美数的定义是其不等于本身的因子之和等于其本身,也就是说 完美数所有因子和等于本身的2倍。
大体解题思路:
- 要得到一个数n的各因子之和,要先得到n的所有质因数。则将问题转换为求解n的所有质因数
- 要求解n的质因数,首先要对素数打表,此处为尽可能节约时间,采用埃式筛法【O(nloglogn)】
PS:若只需求一个数的所有因子个数,则不用写出结构体factor,只需统计所有cnt的个数即可(可以简化代码)
对代码的解释
-
定义prime记录所有的素数,pNum为素数个数;bool型数组p中 p[i]表示i是否为素数,false为是,true为否。
【此为埃式筛法的内容】
-
factor表示一个质因子,x为质因子具体数值,cnt为此质因子的个数,求解质因子步骤大致为:
- 枚举1~sqrt(n)范围内的所有素数p,判断p是否为n的因子
- 若是,则给fac数组中添加质因子p,并初始化个数为0;然后若p还是n的因子,则让n不断除以p并cnt++,直到p不再是n的因子
- 若
- 枚举1~sqrt(n)范围内的所有素数p,判断p是否为n的因子