给定一个正整数n>=5,将其表为彼此两两不相等的正整数之和,求这些正整数之积的最大值。
Input
输入有多组测试数据;对于每组测试数据,只有一行,即正整数n(5<=n<=200000000)。
Output
对于每一组的输入,输出问题描述中的最大值。为了使问题简化,输出时只要输出被整数32749取模后的结果。
Sample Input
5
6
Sample Output
6
8
#include<bits/stdc++.h>
using namespace std;
const long long mod=32749;
long long n;
long long ans;
long long qpow(long long x,long long y)
{
x%=mod;
long long ret=1;
while(y)
{
if(y&1)
{
ret=(ret*x)%mod;
}
x=(x*x)%mod;
y>>=1;
}
return ret;
}
long long inv(long long x)
{
return qpow(x,mod-2);
}
int main()
{
while(scanf("%lld",&n)!=EOF)
{
if(n<=4)
{
if(n==0)
{
printf("1\n");
continue;
}
printf("%lld\n",n);
continue;
}
ans=1;
long long nowsum=0;
long long now=2;
while(nowsum+now<=n)
{
ans=ans*now%mod;
nowsum+=now;
++now;
}
--now;
//cout<<now<<" "<<n-nowsum<<endl;
for(int i=0;i<n-nowsum;++i)
{
if(now==n-nowsum&&now-i==1)
{
ans=ans*inv(now+1)%mod*(now+2)%mod;
continue;
}
ans=ans*inv(now-i)%mod*(now-i+1)%mod;
}
/*
if(now==n-nowsum)
{
ans=ans*inv(now+1)%mod*(now+2);
}*/
printf("%lld\n",ans);
}
}