Description
Consider equations having the following form:
a1x13+ a2x23+ a3x33+ a4x43+ a5x53=0
The coefficients are given integers from the interval [-50,50].
It is consider a solution a system (x1, x2, x3, x4, x5) that verifies the equation, xi∈[-50,50], xi != 0, any i∈{1,2,3,4,5}.
Determine how many solutions satisfy the given equation.
Input
The only line of input contains the 5 coefficients a1, a2, a3, a4, a5, separated by blanks.
Output
The output will contain on the first line the number of the solutions for the given equation.
Sample Input
37 29 41 43 47
Sample Output
654
给出了一个多项式和五个系数,求能使多项式的值为0的变量组合有多少个。
先遍历左边的,将值哈希保存该值出现的次数,再遍历右边的变量,遇到相等的值就将次数加起来
#include <iostream>
#include <cstring>
#include <string>
#include <vector>
#include <queue>
#include <cstdio>
#include <set>
#include <map>
#include <cmath>
#include <algorithm>
#define INF 0x3f3f3f3f
#define MAXN 205
#define Mod 10001
using namespace std;
short hash[25000001];
int main()
{
int a1,a2,a3,a4,a5;
while(~scanf("%d%d%d%d%d",&a1,&a2,&a3,&a4,&a5))
{
memset(hash,0,sizeof(hash));
for(int i=-50;i<=50;++i)
{
if(i==0)
continue;
for(int j=-50;j<=50;++j)
{
if(j==0)
continue;
int sum=(a1*i*i*i+a2*j*j*j)*-1;
if(sum<0)
sum+=25000000;
hash[sum]++;
}
}
int ans=0;
for(int i=-50;i<=50;++i)
{
if(i==0)
continue;
for(int j=-50;j<=50;++j)
{
if(j==0)
continue;
for(int k=-50;k<=50;++k)
{
if(k==0)
continue;
int sum=a3*i*i*i+a4*j*j*j+a5*k*k*k;
if(sum<0)
sum+=25000000;
ans+=hash[sum];
}
}
}
printf("%d\n",ans);
}
return 0;
}