题目描述 现在小明拿到了一个数字n,已知这个数字是两个质数的乘积,请求出这两个质数。 输入描述 输入共一行包含一个整数。 输出描述 输出一行用空格隔开的从小到大两个整数,表示这两个质数。 样例1 输入 10 输出 2 5 提示 0<=n<=2147483647。n保证是两个质数的乘积。C++
时间: 2024-03-25 13:35:55 浏览: 120
用C++实现长整数的输入输出
这个问题可以使用传统的质因数分解方法来解决。具体来说,我们可以枚举从2到sqrt(n)的每个数字,判断其是否是n的因子,如果是,则证明这个数字是n的质因子之一。由于n是两个质数的乘积,因此我们只需要找到其中一个质数即可,另一个质数就等于n除以这个质数得到的值。
以下是完整的 C++ 代码实现:
```
#include <iostream>
#include <cmath>
using namespace std;
bool is_prime(int n) {
if (n <= 1) {
return false;
}
int sqrtn = sqrt(n);
for (int i = 2; i <= sqrtn; i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
int main() {
int n;
cin >> n;
for (int i = 2; i <= sqrt(n); i++) {
if (n % i == 0 && is_prime(i)) {
cout << i << " " << n / i << endl;
break;
}
}
return 0;
}
```
时间复杂度:O(sqrt(n) log n),其中 n 为输入的数字。
阅读全文