poj1840
题意:求解五元三次方程在[-50,50]内的非零整数解
a*x1^3+b*x2^3+c*x3^3+d*x4^3+e*x5^3=0
求解的个数
首先想法:枚举
但是100^5,呵呵...
所以可以将方程变形:
c*x3^3+d*x4^3+e*x5^3=-a*x1^3-b*x2^3
这样,只要先预处理-a*x1^3-b*x2^3的个数,让后用数组存下来
对于负数,直接加上25000000即可,注意数组不要用int会报空间,可以用short
让后暴力枚举x3,4,5即可
#include<stdio.h>
#include<string.h>
#define N 25000000
#define sqr(X) (X*X*X)
#define rep(i,l,r) for(int i=l;i<=r;++i)
short s[25000001];
int a,b,c,d,e,cnt=0;
inline int rp(int x){
if(x<0) x+=N;
return x;
}
int main(){
for(;~scanf("%d%d%d%d%d",&a,&b,&c,&d,&e);cnt=0){
memset(s,0,sizeof s);
rep(i,-50,50) if(i)
rep(j,-50,50) if(j) s[rp(-sqr(i)*a-sqr(j)*b)]++;
rep(i,-50,50) if(i)
rep(j,-50,50) if(j)
rep(k,-50,50) if(k) cnt+=s[rp(sqr(i)*c+sqr(j)*d+sqr(k)*e)];
printf("%d\n",cnt);
}
}