给定正整数x和n,找出一个整数y,使得y^n最接近x,注意y^n可能小于、等于或者大于x。 输入描述 有多组测试数据,每组测试数据是由空格分隔的两个正整数x(1<=x<=1000000)和n(1<=n<=9),当x和n都为0时表示输入的结束。 输出描述 每组测试数据输出一行,即找出的满足要求的整数y。
时间: 2024-03-20 20:40:03 浏览: 51
c语言找出2个数的最大公约数和最小公倍数.docx
好的,这是一个数学问题,我们可以通过二分查找来解决。
具体做法是,首先假设 y^n <= x,然后对 y 进行二分查找,不断调整 y 的值,使得 y^n 最接近 x。具体过程如下:
1. 初始化左右边界:左边界 low 为 0,右边界 high 为 x。
2. 进行二分查找:设当前猜测值为 mid = (low + high) // 2,计算 mid^n 的值。
3. 根据 mid^n 是否小于等于 x 来移动边界:
如果 mid^n 小于等于 x,则说明 mid 可能是 y 的取值,将左边界 low 更新为 mid。
如果 mid^n 大于 x,则说明 mid 太大了,将右边界 high 更新为 mid。
4. 循环以上步骤,直到左右边界重合,此时的值就是最接近 x 的 y 的值。
Python 代码实现如下:
```python
while True:
x, n = map(int, input().split())
if x == 0 and n == 0:
break
low, high = 0, x
while low <= high:
mid = (low + high) // 2
num = mid ** n
if num < x:
low = mid + 1
elif num > x:
high = mid - 1
else:
break
# 找到最接近 x 的 y 的值
if mid ** n >= x:
y = mid - 1
else:
y = mid
print(y)
```
输入样例:
```
2 2
3 2
10 3
0 0
```
输出样例:
```
1
2
2
```
阅读全文