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