n的质因数最多一个大于根号n
反证法:假设有两个,则两者相乘大于n
#include <bits/stdc++.h>
using namespace std;
int t,n;
void divide(){
for(int i=2;i<=n/i;i++){
if(n%i==0){
int num=0;
while(n%i==0){
n/=i;// 防止出现被合数除
num++;
}
printf("%d %d\n",i,num);
}
}
if(n>1) printf("%d 1\n",n);//可能出现一个大于根号n 的质因数
return;
}
int main(int argc, char** argv) {
cin>>t;
while(t--){
cin>>n;
divide();
puts("");
}
return 0;
} 此处用
for(int i=2;i<=n/i;i++){
} 不用i*i<=n是因为i*i可能会破int 不用sqrt(),sqrt耗时间,且可能忘记转int

京公网安备 11010502036488号