质因数:一个数的因数n,并n是质数
1,去除小于2的数字,因为0,1或者负数,因为最小的质数是2
2,遍历2——sqrt(num),如果能除尽,那么i就是num的质因数
3,将 while(num % i == 0) num /= i
void find_prim_factors(int e,unordered_multiset<int> &s)
{
if(e <= 1) return;
for(int i = 2;i*i <= e;++i)
{
if(e % i == 0)
{
s.insert(i);
while(e % i == 0) e /= i;
}
}
if(e > 1) s.insert(e);
}
为什么得到的所有i都是质数?
所有的合数都可以由一些质数相乘得到,while(num % i == 0) num /= i是为了去除有相同质数的情况,这时:数有两种情况(质数,合数),当还是合数时,依然能通过e%i去除质数的乘积值,当是质数时,会走到算法的最后一步。
而得到的所有i都是质数是因为:e%i==0当i是合数的情况是由有相同质数的情况得到的,而while(num % i == 0) num /= i这一步直接去除了被合数整除的情况,所以不需要判断i是否为质数