Eqs
Description
Consider equations having the following form:
a1x1 3+ a2x2 3+ a3x3 3+ a4x4 3+ a5x5 3=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 Source |
一个五元三次方程,求解的个数,没有 0 解;
思路:
暴力求解法;
注意:数组类型用short型 要不然会MLE
#include <iostream>
#include <cstdlib>
#include <stdio.h>
#include <string.h>
using namespace std;
short f1[25000001]; //包括负数解
int main()
{
int a, b, c, d, e;
cin>>a>>b>>c>>d>>e;
memset(f1,0,sizeof(f1));
for( int i = -50; i <= 50; i++ )
{
if( i==0 )continue;
for( int j = -50; j <= 50; j++ )
{
if(j==0)continue;
int x = a*i*i*i + b*j*j*j;
if( x<0 )
x = x+25000000; //若为负数,加上这个长度,转到正数上来
f1[x]++;
}
}
int num = 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 x = -(c*i*i*i + d*j*j*j + e*k*k*k);
if( x<0 )
x = x+25000000;
num += f1[x];
}
}
}
cout<<num<<endl;
return 0;
}