给定一个正四面体。所有的边被分成N个相等的段。在这个四面体内部可以构建多少个顶点在分割点的非退化(|volume|>0)四面体?给定四面体的顶点不能作为分割点。
例子:
- 对于 N=2,答案是 12。
- 对于 N=37,答案是 65561472。
这是一些伪代码的答案,但我未能将最后一步翻译成 C++。这是我到目前为止所做的:
typedef unsigned long long ulong;
ulong histogram[3002];
int main() {
memset(&histogram[0],0,sizeof(ulong)*3002);
ulong N;
cin >> N;
ulong m = N-1;
ulong u,U,z,Z;
ulong tetra = 3*m*m*(53*m*m-34*m+1)/4;
for( u = 1; u < N; u++) {
U = u/(N-u);
for( z = 1; z < N; z++) {
Z = z/(N-z);
histogram[U*Z]++;
}
}
// How to write the following steps in C++?
/*number_degen = 0;
foreach fraction in histogram {
number_degen += histogram{fraction}^2;
}*/
// I am trying something like this
ulong number_degen = 0;
for (int i = 0; i<3002; i++)
number_degen += histogram[i] * histogram[i];
cout<<number_degen<<endl;
cout<<tetra-3*number_degen<<endl;
}
"number_degen" = "950404" 如果 N=37,当它必须是 4836 时