【GESP】C++五级真题(数论考点) luogu-B3871 [GESP202309 五级] 因数分解

这道题是关于对一个数进行**质因数分解**的题目,题目编号为 **B3871 [GESP202309 五级] 因数分解**,要求我们对一个正整数进行质因数分解,并输出分解后的结果。 --- ### 题目大意: 给定一个正整数 $ n $,将其分解为质因数相乘的形式。例如: 输入:`12` 输出:`2*2*3` --- ### 解题思路: 1. 从最小的质数 2 开始,尝试除以每一个数。 2. 如果能整除,则记录这个因数,将商继续分解。 3. 直到当前因数的平方大于剩余的数为止。 4. 最后如果剩下的数大于 1,说明它本身是一个质数,也要加入到结果中。 --- ### C++代码实现如下: ```cpp #include <iostream> #include <vector> using namespace std; int main() { int n; cin >> n; vector<int> factors; // 从2开始尝试除以每个可能的因数 for (int i = 2; i * i <= n; ++i) { while (n % i == 0) { factors.push_back(i); n /= i; } } // 如果n还大于1,说明它本身是一个质数 if (n > 1) { factors.push_back(n); } // 输出结果 for (size_t i = 0; i < factors.size(); ++i) { if (i > 0) cout << "*"; cout << factors[i]; } return 0; } ``` --- ### 代码解释: 1. `vector<int> factors;`:用来保存所有分解出来的质因数。 2. `for (int i = 2; i * i <= n; ++i)`:从2开始尝试分解,直到 $ i^2 > n $ 为止。 - `while (n % i == 0)`:如果i能整除n,就一直除下去。 - 每次除完后,把i加入factors中。 3. `if (n > 1)`:最后剩下的n如果大于1,说明它是一个质数。 4. 输出部分用循环依次输出所有质因数,中间用`*`连接。 --- ### 示例运行: 输入: ``` 12 ``` 输出: ``` 2*2*3 ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值