用c++编程以下题目:小红拿到了一个正整数n,她希望找到n的一个最小因子p满足p*p>n。你能帮帮她吗。 输入描述:第一行输入一个正整数t,代表询问的次数。接下来的t行,每行输入一个正整数n。11t110 2<=t<10^12
时间: 2024-03-23 13:40:04 浏览: 129
以下是C++代码实现:
```c++
#include <iostream>
#include <cmath>
using namespace std;
bool isPrime(int n) {
if (n < 2) return false;
for (int i = 2; i <= sqrt(n); i++) {
if (n % i == 0) return false;
}
return true;
}
int main() {
int t;
cin >> t;
while (t--) {
int n;
cin >> n;
if (n == 1 || n == 2 || n == 3) {
cout << "-1" << endl;
}
else {
int i;
for (i = 2; i <= sqrt(n); i++) {
if (n % i == 0) {
if (i * i > n) {
cout << i << endl;
break;
}
else if (isPrime(n / i) && (n / i) * (n / i) > n) {
cout << n / i << endl;
break;
}
}
}
if (i > sqrt(n)) cout << "-1" << endl;
}
}
return 0;
}
```
解释:
在这个题目中,我们需要找到一个正整数n的一个最小因子p满足p*p>n。我们可以从小到大枚举n的所有因子i,当i*i>n时,i就是所求的最小因子p。但是当n比较大时,这种方法会超时,因此我们可以将i从2到sqrt(n)枚举,然后判断i和n/i是否都是n的因子,如果是,我们可以比较i和n/i哪个更接近sqrt(n),然后输出最小的那个。
另外,我们还需要判断n是否为1、2或3,因为它们没有满足题目要求的最小因子p。同时,我们还需要判断i是否为质数,如果不是,那么我们仍然需要继续枚举。
阅读全文