xtuoj 方程组
题目
思路
两个方程,平方这个更容易处理,所以我们通过平方这个求值,如何载代入到立方这个验证。我们确定x的范围是-sqrt(m)~sqrt(m),枚举所有的x,然后通过平方这个式子求出y,如果y不是整数,那么这对x和y就不符合要求,因为题目说了是整数解,就直接跳过这轮循环,如果找到满足平方的这组解,我们还要验证是否满足x<=y,以及立方式子条件,很容易溢出,用long long,但是我们直接开方算出来的是y的非负解,没有考虑负数的情况,所以我们要把y变成-y看看是否满足,有满足的就找到了,直接输出,跳出循环,并标记flag=1,flag初始化是0,如果flag还是0,那么就不存在这样的整数解,直接输出0。
代码
#include<stdio.h>
#include<math.h>
#define ll long longint m,n,flag;int main(){int T;scanf("%d",&T);while(T--){flag=0;scanf("%d%d",&n,&m);int start=sqrt(m);for(ll x=-start;x<=start;x++){ll y_2=m-x*x;ll y=sqrt(y_2);if(y*y!=y_2) continue;if(x<=y&&x*x*x+y*y*y==n){flag=1;printf("%lld %lld\n",x,y);break;}if(x<=-y&&x*x*x-y*y*y==n){flag=1;printf("%lld %lld\n",x,-y);break; }}if(!flag) printf("0\n");} return 0;
}