求
,其中x≤y?的整数解。
第一行是一个整数T?(1≤T≤1000),表示样例的个数。 第二行是两个整数n,?n∈[?109,109]和m,?m∈[0,109]。
依次输出一个样例的结果。 输出一行,为两个整数,之间用一个空格隔开;如果不存在解,输出”0”。
3 1 1 2 2 1 0
0 1 1 1 0
AC代码
#include<stdio.h>
#include<math.h>
//判断是否是平方数
int Judge(int n){
int flag=0;
int i=sqrt(n);
if(i*i==n){
flag=1;
}
return flag;
}
int main(){
int T;
scanf("%d",&T);
while(T--){
int n,m,x,y,flag=1;
scanf("%d%d",&n,&m);
int t=(int)sqrt(m);
for(x=-t;x<=t;x++){//注意x的范围
if(Judge(m-x*x)){
int y=sqrt(m-x*x);
if(x*x*x+y*y*y==n){
printf("%d %d\n",x,y);
flag=0;
break;
}
if(x*x*x-y*y*y==n){//负数的情况
printf("%d %d\n",x,-y);
flag=0;
break;
}
}
}
if(flag)printf("0\n");
}
}
解题思路:t=sqrt(m),x的范围从-t到t,判断m-x*x是否为平方数,若是,代入立方式验证结果,注意考虑y为负数的情况。