给定N个正整数a[i],小明想知道对于每个正整数a[i]是否存在两个因子d1>1 d2>1 且gcd(d1+d2,a[i])=1。如果无解的话输出d1 d2均为-1 输入 输入分为两行,第一行一个正整数N (1<=N<=5*10^5) 第二行N个正整数a[i] (2<=a[i]<=10^7) 输出 输出分为两行 如果有多种解,输出其中一种即可 第一行表示N个数字的d1 第二行表示N个数字的d2用using namespace std;
时间: 2024-04-16 19:28:30 浏览: 90
抱歉,我之前给出的代码是使用Python编写的。如果你想在C++中实现相同的功能,你可以参考以下代码:
```cpp
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
int gcd(int a, int b) {
while(b != 0) {
int temp = b;
b = a % b;
a = temp;
}
return a;
}
void find_factors(int N, vector<int>& arr) {
for(int i = 0; i < N; i++) {
int a = arr[i];
int d1 = -1, d2 = -1;
for(int j = 2; j <= sqrt(a); j++) {
if(a % j == 0) {
d1 = j;
d2 = a / j;
break;
}
}
if(d1 != -1 && d2 != -1 && gcd(d1 + d2, a) == 1) {
cout << d1 << " ";
} else {
cout << -1 << " ";
}
}
cout << endl;
}
int main() {
int N;
cin >> N;
vector<int> arr(N);
for(int i = 0; i < N; i++) {
cin >> arr[i];
}
find_factors(N, arr);
return 0;
}
```
这段代码与之前给出的Python代码实现相同的功能,但是使用了C++语言。请注意,这里使用了`vector`来存储输入的正整数数组。你可以根据需要进行修改和优化。
希望这次的回答对你有帮助!如果还有其他问题,请随时提问。
阅读全文