题目大意:求多少组a,b,c 满足(a+b+c)^3=a^3+b^3+c^3+n
题解:将上述等式化简得 n=3(a+b)(a+c)(b+c)
#include<iostream>
#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);
}
}