由算术基本定理:
任何一个大于1的自然数nn,都可以唯一分解成有限个质数的乘积,即
(这里 p1<p2<…<pn 均为质数,ai为正整数)
试除法:
所以从质数2开始被n除以,每个质数都会反复除到无法约,即他的指数。
注意:
- 对于任意整数n,如果存在大于根号n的质因子,则这样的质因子最多只有一个
- 非质数一定不是因子,不会被除尽,所以可以循环遍历
i = 2 to n^0.5
,如虽然遍历到了4,但是4不可能被除尽,为什么呢?因为4也可以被算数基本定理分解为2*2这种比他小的质因数,所以在比他小的质因数分解试除时已经解决。
先看代码:
#include <iostream>
using namespace std;
int main(){
int n,a;
cin>>n;
while(n--){
cin>>a;
for(int i = 2;i <= a / i;i++){
int res = 0;
while(!(a % i)){
a /= i;
res++;
}
if(res) cout<<i<<" "<<res<<endl;
}
if(a > 1) cout<<a<<" 1"<<endl; // 最后未除尽表示自己是单个的质数因子
cout<<endl;
}
return 0;
}