【每日算法】基础算法——分界质因数(五十五)

题目内容

给定n个正整数ai,将每个数分解质因数,并按照质因数从小到大的顺序输出每个质因数的底数和指数。

输入格式

第一行包含整数n。

接下来n行,每行包含一个正整数ai。

输出格式

对于每个正整数ai,按照从小到大的顺序输出其分解质因数后,每个质因数的底数和指数,每个底数和指数占一行。

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

数据范围

1≤n≤100 ,
1≤ai≤2*10^9

输入样例

2
6
8

输出样例

2 1
3 1

2 3

题解

本题仍旧以试除法为主。
这里仅仅指出一点就是,因为n中最多只包含一个大于sqrt(n)的质因子,因此在代码编写的时候,把小于sqrt(n)的质因子找出来之后,再处理大于的情况会更加简便。

代码

#include <iostream>
#include <algorithm>

using namespace std;

void divide(int n){
for(int i = 2; i <= n / i; i++)
if(n % i == 0){ // i一定是质数时if才可能成立。因为当枚举到i的时候,n已经把从2到i-1的数除干净了!注意n是一直在while循环中变化的!
int s = 0;
while(n % i == 0){
n /= i;
s++;
}
printf("%d %d\n",i , s);
}
if (n > 1) printf("%d %d\n",n,1);
puts("");
}

int main(){
int n;
scanf("%d", &n);
while(n --){
int num;
scanf("%d",&num);
divide(num);
}
return 0;
}
Author: Frederic Niu
Link: https://www.fredericniu.cn/2021/01/28/【每日算法】基础算法——分界质因数(五十五)/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
我的公众号