33,010
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#define MAX 1000001
int prime[MAX];
__int64 lcm = 0;
void PrimeNum()
{
int i, j;
for(i = 0; i < MAX; i++)
prime[i] = 1;
for(i = 2; i*i < MAX; i++)
{
if(prime[i]==1)
{
for(j=2*i; j<MAX; j+=i)
prime[j] = 0;
}
}
}
__int64 Gcd(__int64 m, __int64 n)
{
__int64 r;
if(m < n)
{
r = m;
m = n;
n = r;
}
while(n != 0)
{
r = m%n;
m = n;
n = r;
}
return m;
}
void Feasible(__int64 result[])
{
__int64 gcd, temp;
gcd = Gcd(Gcd(result[0], result[1]), result[2]);
temp = result[0]*result[1]*result[2] / gcd;
if(temp > lcm) lcm = temp;
}
void Greedy(__int64 n)
{
__int64 result[3]={n,n-1,n-2};
__int64 i, m, k=n, temp;
Feasible(result);
for(m = 2; m>=0; m--)
{
for(i = n-3; prime[i]==0; i--)
{
result[m] = i;
Feasible(result);
}
result[0] = n;
result[1] = n-1;
result[2] = n-2;
}
while(prime[k]==0) k--;
temp = n*(n-1)*k;
if(temp > lcm) lcm = temp;
printf("%I64d", lcm);
}
int main()
{
__int64 n;
scanf("%I64d", &n);
PrimeNum();
Greedy(n-1);
system("pause");
return 0;
}