分解质因数

 

 #include<iostream>

#include<algorithm>

using namespace std;

int divide(int n){//输出底数和指数

for(int i=2;i<=n/i;i++){//可以发现,n中最多只有一个大于sqrt(n)的因子。通过反证法:如果有两个大于sqrt(n)的因子,那么相乘会大于n,矛盾。

if(n%i==0){//举个例子:16%2==0

int s;//指数

while(n%i==0){//16%2==0 ; 8%2==0 ;4%2==0; 2%2==0 ;1%2==1,不满足条件,输出

n/=i;//n=16/2=8 ; 8/2=4 ; 4/2=2;  2/2=1;

s++;//s++=1; s++=2; s++=3; s++=4;

}

cout<<i<<' '<<s<<endl;

}

//如果除到最后发现n还是大于1,则是那个唯一大于sqrt(n)的因子,即n本身

if(n>1) cout<<n<<' '<<1<<endl;

cout<<endl;//每个正整数的质因数全部输出完毕后,输出一个空行。

}

int main(){

int n;

cin>>n;

while(n--){

int x;

cin>>x;

divide(x);

}

}

posted @ 2023-03-13 21:16  chenxinyue  阅读(16)  评论(0编辑  收藏  举报