质因子分解模板

2020-02-10  本文已影响0人  km15

模板
思路:
1、枚举1~sqrt(n)范围内的所有质因子P,判断P是否是n的因子
(1)如果是因子,那么给fac数组中增加质因子p,并初始化个数为0
然后只要P还是n的质因子,就不断除以p,同时个数加1,知道P不是因子位置
(注意,num++是最后的)

(2)如果P不是因子,直接跳过
2、如果上面步骤结束后,n不等于1,则说明有而且只有一个大于sqrt(n)(可能是n本身),这是加入fac,并令其个数为1

时间复杂度:根号n

struct factor{
    int x;  //x为质因子 
    int cnt;    //cnt为质因子个数 
}fac[10];

if(n % prime[i] == 0){
    fac[num].x = prime[i];
    fac[num].cnt = 0;
    while(n % prime[i] == 0){
        fac[num].cnt++;
        n /= prime[i];
    } 
    num++
}

if(n != 1){
    fac[num++].x = n;
    fac[num++].cnt = 1;
}
上一篇 下一篇

猜你喜欢

热点阅读