如果你觉得这篇题解对你有用,欢迎大家多多点赞关注,Thankyou~
分析
质因子:底数为质数
当枚举到i
时,意味着把2~i-1
的质因子都除干净了。
也就意味着i
不包含从2~i-1
的质因子
那么n
是i
的倍数,并且n、i
中不包含2~i-1
之间的所有质因子
那么i
一定是质数,不是合数
优化
性质:
n
中最多只包含一个大于sqrt(n)
的质因子
证:
假设n
中包含两个大于sqrt(n)
的质因子,两个相乘必定大于n。
所以最多只存在一个大于sqrt(n)
的质因子。
时间复杂度
试除法判定质数
试除法判定质数
时间复杂度一定是O(sqrt(n))
分解质因数:
最好情况下是:O(logn)
最坏情况下是:O(sqrt(n))
时间复杂度介于O(logn)~O(sqrt(n)
之间,总体优于试除法判定质数。
Accode
import java.util.*;
public class Main{
public static void divide(int n){
for(int i=2;i<=n/i;i++){
if(n%i==0){
//找到质因子
int s=0;
//统计质因子的个数
while(n%i==0){
n/=i;
s++;
}
System.out.println(i+" "+s);
//i表示质数,s表示指数(质因子出现的次数)
}
}
if(n>1)System.out.println(n+" "+1);
//如果最后n大于1,则n为大于sqrt(n)的数。
//特判输出一下即可。
System.out.println();
}
public static void main(String []args){
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
while(n-->0){
int a=sc.nextInt();
divide(a);
}
}
}