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); } }