NC22602. Rinne Loves Math
描述
输入描述
第一行一个整数 T,表示数据组数。
接下来 T 行,每行一个整数 x 表示根号下的数。
输出描述
输出一共 T 行,每行两个数表示 化简后的答案 a,b
示例1
输入:
4 20 25 -2005 11
输出:
2 5 5 1 -1 1 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; }