题目链接
题目大意:求多少组a,b,c 满足(a+b+c)^3=a^3+b^3+c^3+n
题解:将上述等式化简得 n=3(a+b)(a+c)(b+c)
#include#define int long long using namespace std; int n; int a[1000006]; int cnt=0; signed main(){ scanf("%lld",&n); if(n%3) printf("0"); //当n不为3的倍数的时候,不满足条件 else{ int ans=0; n/=3; for(int i=2;i*i<=n;i++){ if(n%i==0) a[++cnt]=i;//将n的因子记录下来 } //将(a+b)看作a1 将(a+c)看作a2 将(b+c)看作a3 逐个枚举 for(int i=1;i<=cnt&&a[i]*a[i]*a[i]<=n;i++){ for(int j=i;j<=cnt&&a[j]*a[j]*a[i]<=n;j++){ int a1=a[i]; int a2=a[j]; int a3=n/a[i]/a[j]; if(a1*a2*a3==n&&(a1+a2-a3>0)&&(a1+a2+a3)%2==0){ if(a1==a2&&a2==a3&&a1==a3) ans++;//当三者相等时 对答案只有一次贡献 else if(a1!=a2&&a2!=a3&&a1!=a3) ans+=6;//当三者都不相等时 对答案有3个值全排列共六次贡献 else ans+=3; //当有两个数字相同时,共产生3次贡献 } } } printf("%lld",ans); } }



