给我一段简洁的质因数分解的c++代码,分解得到的质因子存入vector<int>p, 质因子重复次数存入vector<int>pc
时间: 2024-10-21 11:07:32 浏览: 29
如果你需要同时存储每个质因子及其出现的次数,你可以稍微修改一下之前的代码,创建两个向量分别存储质因子和它们的计数。这里是一个示例:
```cpp
#include <iostream>
#include <vector>
#include <unordered_map>
// 判断是否为质数
bool isPrime(int num) {
if (num <= 1) return false;
for (int i = 2; i * i <= num; ++i) {
if (num % i == 0)
return false;
}
return true;
}
// 质因数分解并统计频率
void primeFactorize(std::vector<int>& p, std::vector<int>& pc, int n) {
p.clear();
pc.clear();
while (n > 1) {
int factor = 2;
while (n % factor != 0 && !isPrime(factor)) {
++factor;
}
// 添加质因子到p向量,并更新pc向量的计数
if (find(p.begin(), p.end(), factor) == p.end()) {
p.push_back(factor);
pc.push_back(1);
} else {
auto it = find(pc.begin(), pc.end(), factor);
(*it)++;
}
n /= factor;
}
}
int main() {
int number;
std::cout << "Enter a number to factorize: ";
std::cin >> number;
std::vector<int> p;
std::vector<int> pc;
primeFactorize(p, pc, number);
std::cout << "Prime factors and their counts are: ";
for (size_t i = 0; i < p.size(); ++i) {
std::cout << p[i] << "(" << pc[i] << ") ";
}
return 0;
}
```
在这个版本的代码里,我们使用`unordered_map`来跟踪每个质因子及其出现的次数。如果质因子已经在`p`向量中,则在对应的`pc`位置增加计数。
阅读全文