Rinne Loves Math

Rinne Loves Math 

链接: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不存在b的一个因子k s.t. ∃x∈N∗,x2=k
即根号下的数字不含平方数因子。
举个最简二次根式的例子:√5,√200501175,20050117
举个不是最简的例子:√20,√44420,444
现在 Rinne 给了你形如 √nn 的式子中的 n,让你输出化简后的结果 a√bab 中的 a,b,如果这样的式子在实数范围内没有意义,输出 -1。

输入描述:

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

输出描述:

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

示例1

输入

 

4
20
25
-2005
11

输出

 

2 5
5 1
-1
1 11

说明

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

备注:

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

暴力解题....

#include<stdio.h>
#include<math.h>
#include<string.h>
#include<algorithm>
using namespace std;
int t;
int judge(int num)
{
	int v = sqrt(num);
	for(int i = t; i <= v; i++)
	{
		if(num % i == 0)
		{
			int num1 = num / i;
			if(num1 % i == 0 && num1)
			{
				return i * i;
			}
		}
	}
	return 0;
}
int main()
{
	int n;
	scanf("%d", &n);
	while(n--)
	{
		t = 2;
		int num;
		scanf("%d", &num);
		if(num < 0)
		{
			printf("-1\n");
			continue;
		}
		int flag = judge(num);
		int ans=1;
		if(!flag)
		{
			printf("%d %d\n", ans, num);
			continue;
		}
		ans = sqrt(flag);
		num = num / flag;
		while(1)
		{
			int num1 = judge(num);
			if(num1 == 0)
			break;
			if(num1! = 1)
			{
				ans = ans * sqrt(num1);
				num = num / num1;
			}
		}
		printf("%d %d\n", ans, num);
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值