思路(这个思路不是自己想出来的,是查了数学的相关资料才得出的,凭空推导C(n,4)是做不到的)如下:
每一个四边形中,都有一个交点。
从顶点中,任选4个点,组成四边形。
对正五边形,C(5,4)=5
正六边形C(6,4)=C(6,2)=6*5/2*1=15
n=10^5,C(10^5,4)=10^5*(10^5-1)*(10^5-2)*(10^5-3)/(4*3*2*1)=4*10^18
2^63-1=9.0*10^18
计算过程中long long要溢出,但计算结果会溢出。
随机试试9*8*7*6,8*7*6*5,7*6*5*4,6*5*4*3,5*4*3*2,4*3*2*1
可以看到,一定有一个数可以整除3,一定有一个数可以整除4,一定有一个数可以整除2.
AC代码如下:
#include <bits/stdc++.h>
#define LL long long
LL a[5];
int main(){
LL n,ans=1;
int i;
scanf("%lld",&n);
for(i=0;i<4;i++)a[i]=n-i;
for(i=0;i<4;i++)
if(a[i]%3==0){a[i]/=3;break;}
for(i=0;i<4;i++)
if(a[i]%4==0){a[i]/=4;break;}
for(i=0;i<4;i++)
if(a[i]%2==0){a[i]/=2;break;}
for(i=0;i<4;i++)ans*=a[i];
printf("%lld\n",ans);
return 0;
}