列表

详情


NC22602. Rinne Loves Math

描述

Rinne 刚刚学习了最简二次根式,于是她想用程序实现一个。
为了简化问题,在本题中,最简二次根式 的定义为:

即根号下的数字不含平方数因子。
举个最简二次根式的例子:
举个不是最简的例子:
现在 Rinne 给了你形如 的式子中的 n,让你输出化简后的结果  中的 a,b,如果这样的式子在实数范围内没有意义,输出 -1。

输入描述

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

输出描述

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

示例1

输入:

4
20
25
-2005
11

输出:

2 5
5 1
-1
1 11

说明:

20 = 4 \times 5
25 = 5 \times 5
实数范围内 \sqrt{n}中 n 小于 0 没有意义。
11 是个质数。

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

Python3 解法, 执行用时: 1762ms, 内存消耗: 7064K, 提交时间: 2021-11-09 20:09:41

n=int(input())
for i in range(n):
    x=int(input())
    if x>=0:
        t=2
        a=1
        while t<=x**0.5 and x>0:
            if x%(t**2)==0:
                a*=t
                x/=t**2
                t-=1
            t+=1
        b=x
        print(a,int(b))
    else:
        print(-1)

C(clang11) 解法, 执行用时: 8ms, 内存消耗: 372K, 提交时间: 2020-11-13 14:37:36

#include<stdio.h>
int main()
{
	long long a,b,i,t,ti;
	scanf("%lld",&t);
	for(ti=0;ti<t;ti++)
	{
		a=1;
		scanf("%lld",&b);
		if(b<0)
		{
			printf("-1\n");
			continue;
		}
		for(i=2;i*i<=b;i++)
			if(b%(i*i)==0)
			{
				b/=i*i;
				a*=i;
				i=1;
			}
		printf("%lld %lld\n",a,b);
	}
}

C++11(clang++ 3.9) 解法, 执行用时: 15ms, 内存消耗: 416K, 提交时间: 2020-02-17 23:32:26

#include<bits/stdc++.h>
int main()
{
	int n,i,T,f;
	scanf("%d",&T);
	while(T--)
	{
		f=0;
		scanf("%d",&n);
		if(n<0)
		puts("-1"),f++;
		for(i=floor(sqrt(n));i>0&&!f;i--)
		if(n%(i*i)==0)
		printf("%d %d\n",i,n/i/i),f++;
	}
	return 0;
}

C++14(g++5.4) 解法, 执行用时: 18ms, 内存消耗: 436K, 提交时间: 2019-11-27 20:51:26

#include<bits/stdc++.h>
using namespace std;

int main()
{
	int i,j,T,x;
	scanf("%d",&T);
	while(T--)
	{
		scanf("%d",&x);
		for(i=1;i*i<=x;i++)if(x%(i*i)==0)j=i;
		x<0?printf("-1\n"):printf("%d %d\n",j,x/(j*j));
	}
    return 0;
}

上一题