蓝桥杯C++基础算法-分解质因子
·
这段代码的功能是分解质因数,即将一个正整数分解为若干个质数的乘积,并输出每个质因数及其对应的指数。以下是代码的详细思路解析:
1. 问题背景
给定一组正整数,需要将每个数分解为质因数的乘积,并输出每个质因数及其对应的指数。例如,对于数字 18,其质因数分解为 2^1 * 3^2。
2. 代码逻辑解析
(1) 质因数分解函数
void divide(int x)
{
for (int i = 2; i <= x / i; i++)
{
if (x % i == 0)
{
int s = 0;
while (x % i == 0)
{
x /= i;
s++;
}
cout << i << ' ' << s << endl;
}
}
if (x > 1) cout << x << ' ' << 1 << endl;
cout << endl;
}
-
输入:一个正整数
x。 -
输出:每个质因数及其对应的指数。
-
逻辑:
-
外层循环:
-
从2开始,遍历到
sqrt(x)(即x / i),检查x是否能被i整除。
-
-
内层循环:
-
如果
x能被i整除,使用一个循环不断除以i,直到x不能被i整除。 -
记录
i的指数s。
-
-
输出:
-
输出质因数
i及其指数s。
-
-
处理剩余部分:
-
如果最终
x大于1,说明x本身是一个质数,输出x及其指数1。
-
-
换行:
-
每个数的质因数分解结束后输出一个换行符。
-
-
(2) 主函数
int main()
{
int n; cin >> n; // 输入测试用例的数量
while (n--)
{
int x; cin >> x; // 输入一个整数
divide(x); // 调用 divide 函数进行质因数分解
}
return 0;
}
-
输入:测试用例的数量
n,然后是n个正整数。 -
逻辑:
-
使用一个循环处理每个测试用例。
-
对于每个整数
x,调用divide函数进行质因数分解。
-
3. 示例运行
输入:
3
18
12
25
运行过程:
-
输入测试用例数量
n = 3。 -
输入3个整数:18, 12, 25。
-
对每个整数调用
divide函数:-
divide(18):-
2 1(2的指数为1) -
3 2(3的指数为2)
-
-
divide(12):-
2 2(2的指数为2) -
3 1(3的指数为1)
-
-
divide(25):-
5 2(5的指数为2)
-
-
输出:
2 1
3 2
2 2
3 1
5 2
4. 总结
这段代码的核心思路是通过一个高效的质因数分解函数 divide,结合主函数中的循环,逐个分解输入的整数为质因数的乘积,并输出每个质因数及其对应的指数。这种方法适用于处理一组正整数的质因数分解问题。
完整代码
#include<bits/stdc++.h>
// 使用标准命名空间,这样可以直接使用标准库中的类和函数,无需加std::前缀
using namespace std;
// 分解质因数的函数,参数x是要分解的整数
void divide(int x)
{
// 从最小的质数2开始遍历到x的平方根
for(int i = 2; i <= x / i; i ++)
// 如果i是x的因数
if(x % i == 0)
{
// 记录当前质因数i的指数
int s = 0;
// 不断将x除以i,直到x不能再被i整除
while(x % i == 0) x /= i, s ++;
// 输出当前质因数i及其指数s
cout << i << ' ' << s << endl;
}
// 如果x大于1,说明x本身是一个质数,输出该质数及其指数1
if(x > 1) cout << x << ' ' << 1 << endl;
// 输出一个空行,用于分隔不同数字的分解结果
cout << endl;
}
int main()
{
int n;
// 从标准输入读取一个整数n,表示接下来要处理的数字的数量
cin >> n;
// 循环n次
while(n --)
{
int x;
// 从标准输入读取一个整数x,表示要分解的数字
cin >> x;
// 调用divide函数对x进行质因数分解
divide(x);
}
// 程序正常结束,返回0
return 0;
}
更多推荐
所有评论(0)