题目链接:https://ac.nowcoder.com/acm/contest/370/J
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld

题目描述

Rinne 刚刚学习了最简二次根式,于是她想用程序实现一个。
为了简化问题,在本题中,最简二次根式 a√bab 的定义为:
不存在b的一个因子k s.t. ∃x∈N∗,x2=k
即根号下的数字不含平方数因子。
举个最简二次根式的例子:√5,√20050117
举个不是最简的例子:√20,√444
现在 Rinne 给了你形如 √n 的式子中的 n,让你输出化简后的结果 a√b 中的 a,b,如果这样的式子在实数范围内没有意义,输出 -1。

输入描述:

第一行一个整数 T,表示数据组数。
接下来 T 行,每行一个整数 x 表示根号下的数。

输出描述:

输出一共 T 行,每行两个数表示 √x 化简后的答案 a,b

输入

4
20
25
-2005
11

输出

2 5
5 1
-1
1 11

说明

20=4×5
25=5×5
实数范围内 √n 中 n 小于 0 没有意义。
11 是个质数。

备注:

T≤100,0<|x|≤1e7

解题思路

直接从根号n开始判断,求出最大的平方根因子。

#include <math.h>
#include <stdio.h>
int main()
{
    int n, t;
    scanf("%d", &t);
    while (t--)
    {
        scanf("%d", &n);
        if (n < 0)
        {
            printf("-1\n");
            continue;
        }
        for (int i = sqrt(n); i > 0; i--)
        {
            if (!(n % (i * i)))
            {
                printf("%d %d\n", i, n / (i * i));
                break;
            }
        }
    }
    return 0;
}