📜  门| GATE CS 2021 |设置 2 |第 39 题(1)

📅  最后修改于: 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)。