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
",cnt);
	}
}


原文地址:https://www.cnblogs.com/Extended-Ash/p/9477379.html