模板
思路:
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;
}
网友评论