📅  最后修改于: 2023-12-03 15:28:38.974000             🧑  作者: Mango
给定一个正整数N,找到一个最小的正整数M,满足将数字N插入到数字M中的某个位置后,结果是一个完全平方数。例如,给定N = 4,最小的M是121。如果不存在这样的M,则返回-1。
第一行包含一个整数T,表示测试用例的数量。每个测试用例包含一个整数N,表示要插入的数字。
对于每个测试用例,打印最小的M值。如果不存在这样的M,则打印-1。
2
4
5
121
-1
本题要求我们找到一个最小的正整数M,使得将数字N插入到M中的某个位置后,结果是一个完全平方数。为了达到目标,我们需要通过数学方法求解。下面介绍一种可行的解法。
首先,我们将数字N插入到M的个位和十位之间,结果为一个数x,即 x = a100 + N10 + b,其中a和b是两个小于10的数字。我们需要求解a和b的值,使得x是一个完全平方数。因为x是一个完全平方数,所以x的平方根是一个整数。
因为x是一个3位数,所以x的平方根最多只有两位,即 sqrt(x) <= 99。我们可以穷举可能的两位数,计算其平方以及x的各个数字,检验其是否符合要求。如果找到符合要求的整数,则输出该整数,否则输出-1。
下面是示例代码实现。
def find_smallest_square(N):
for i in range(10, 100):
x = i * i
a = x // 100
b = x % 10
if a == N and b < 10:
return x
return -1
t = int(input().strip())
for _ in range(t):
N = int(input().strip())
print(find_smallest_square(N))
时间复杂度为O(1),因为该算法只需要穷举有限个数的值,而这个数值的个数是常数级别的,因此时间复杂度是常数级别的,即O(1)。
空间复杂度取决于输入数据量的大小,因此空间复杂度是O(1)。