用c++编程。描述 小禾这天在做一道非常有意思的数学题,已知有两个整数,在这两个整数之间有着非常多的整数的质因数分解,设这两个整数分别为y和h,且y<h<1000000,请求出区间[y,h]中所有整数的质因数分解,按照示例方式打印出来。 输入描述 输入两个整数y和h,且y<h<1000000。 输出描述 每行输出一个数的分解,形如z=h1 * h2 * h3…(h1<=h2<=h3…,z也是从小到大的)
时间: 2024-02-15 15:04:12 浏览: 61
用c++做的整数因子分解问题
好的,下面是C++代码实现:
```c++
#include <iostream>
#include <vector>
using namespace std;
vector<int> sieve(int n) {
// 筛法求质数
vector<bool> is_prime(n+1, true);
vector<int> primes;
for (int i = 2; i <= n; i++) {
if (is_prime[i]) {
primes.push_back(i);
for (int j = i*i; j <= n; j += i) {
is_prime[j] = false;
}
}
}
return primes;
}
vector<int> prime_factorization(int n, const vector<int>& primes) {
// 质因数分解
vector<int> factors;
for (int p : primes) {
while (n % p == 0) {
factors.push_back(p);
n /= p;
}
if (n == 1) break;
}
if (n > 1) factors.push_back(n);
return factors;
}
int main() {
int y, h;
cin >> y >> h; // 读入y和h
vector<int> primes = sieve(h); // 求解区间内所有质数
for (int i = y; i <= h; i++) {
vector<int> factors = prime_factorization(i, primes);
cout << i << "=";
for (int j = 0; j < factors.size(); j++) {
cout << factors[j];
if (j != factors.size()-1) cout << " * ";
}
cout << endl;
}
return 0;
}
```
希望这个代码能够帮助到你。
阅读全文