方程式

                                              方程式

Description

Consider equations having the following form: a*x1*x1 + b*x2*x2 + c*x3*x3 + d*x4*x4 = 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.

Output

or 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
# include<iostream>//hash算法
# include<cstring>
using namespace std;
int hash1[1000003];
int hash2[1000003];
int main()
{
  int a,b,c,d,count,i,j,s;
  while(cin>>a>>b>>c>>d)
  {
      count=0;
      if(a>0&&b>0&&c>0&&d>0||a<0&&b<0&&c<0&&d<0)//提高效率
      cout<<"0"<<endl;
      else
      {
          memset(hash1,0,sizeof(hash1));
           memset(hash2,0,sizeof(hash2));
          for(i=1;i<=100;i++)
              for(j=1;j<=100;j++)
              {
                  s=a*i*i+b*j*j;
          if(s>=0)
              hash1[s]++;//储存同一个和
          else hash2[-s]++;
              }
                  for(i=1;i<=100;i++)
                      for(j=1;j<=100;j++)
                      {
                          s=c*i*i+d*j*j;
                         if(s<=0)
                             count+=16*hash1[-s];//找到对应的相反数
                         else count+=16*hash2[s];
                      }
                      cout<<count<<endl;
      }
  }
    return 0;
}

 

posted on 2012-05-30 20:34  即为将军  阅读(261)  评论(0)    收藏  举报

导航