给定一个正整数n,求最小的正整数 x,使得我们能找到整数y,满足y平方= n + x平方 输入数据一行,一个正整数n。存在输出x,不存在输出-1.c++代码
时间: 2024-11-15 09:20:34 浏览: 57
要求找到最小的正整数 `x`,使得 `y^2 = n + x^2` 有解,这是一个数学问题。我们可以转换为寻找两个整数的平方和等于 `n` 的情况。这样的组合可能不存在,特别当 `n` 是奇数时,因为没有两个偶数平方之和能等于奇数。
我们可以尝试从1开始枚举 `x`,然后计算 `y = sqrt(n - x^2)`。如果 `y` 可以被整除(即 `sqrt(n - x^2)` 是整数),那么找到了解;否则,继续增加 `x`。当找不到整数解时,返回 `-1`。
下面是相应的 C++ 代码:
```cpp
#include <iostream>
#include <cmath>
using namespace std;
int main() {
int n;
cin >> n;
// 从1开始遍历,检查每个x值对应的y是否为整数
for (int x = 1; ; x++) {
double y_squared = n - x * x;
if (y_squared >= 0) {
double y = sqrt(y_squared);
if (y * y == y_squared) {
cout << x << endl;
return 0;
}
} else {
break; // 如果 y_squared 不是正数,说明找不到解
}
}
cout << -1 << endl;
return 0;
}
```
阅读全文