Consider equations having the following form:
ax12+b*x22+cx32+d*x42=0
a, b, c, d are integers from the interval [-50,50] and any of them cannot be 0.
It is consider a solution a system ( x1,x2,x3,x4 ) that verifies the equation, xi is an integer from [-100,100] and xi != 0, any i ∈{1,2,3,4}.
Determine how many solutions satisfy the given equation.
Input
The input consists of several test cases. Each test case consists of a single line containing the 4 coefficients a, b, c, d, separated by one or more blanks.
End of file.
Output
For each test case, output a single line containing the number of the solutions.
Sample Input
1 2 3 -4
1 1 1 1
Sample Output
39088
0
这一题的题意比较好理解,就是让你找到ax12+b*x22+cx32+d*x42=0 符合这个公式的数据有多少组,给了你x1,x2,x3,x4的值,这就好写了,首先我们排除那些整组数据都是>0或者<0的,然后再将a,b,c,d,拆分开为a+b何c+d,找到他们的和为0就是对的,接着最后的数据要*16,因为每组数据都有对应的正负值,就是2的四次方。
下面是代码:
#include<stdio.h>
#include<string.h>
int m[1100000],n[1100000];
int main()
{
int a,b,c,d;
while(~scanf("%d %d %d %d",&a,&b,&c,&d))
{
int i,j,k,l=0;
if((a<0&&b<0&&c<0&&d<0)||(a>0&&b>0&&c>0&&d>0))
{
printf("0\n");
continue;
}
memset(m,0,sizeof(m));
memset(n,0,sizeof(n));
for(i=1;i<=100;i++)
{
for(j=1;j<=100;j++)
{
k=a*i*i+b*j*j;
if(k>=0)
m[k]++;
else
{
k=-k;
n[k]++;
}
}
}
for(i=1;i<=100;i++)
{
for(j=1;j<=100;j++)
{
k=c*i*i+d*j*j;
if(k<=0)
{
k=-k;
l=l+m[k];
}
else
{
l=l+n[k];
}
}
}
l=l*16;
printf("%d\n",l);
}
return 0;
}