思路:

n<=3,就是n.

考虑n>3:

我们可以轻松证明n,n-1这两个数互质:

设gcd(n,n-1)=g,n=g*k1,n-1=g*k2;

n-(n-1)=g(k1-k2)=1;

所以 g=1.

当n,n-2互质就更好了,n*(n-1)*(n-2)最大呀。

设gcd(n,n-2)=g,n=g*k1,n-2=g*k2;

n-(n-2)=g(k1-k2)=2; 得g<=2;

很好发现,g要么是1,要么是2,

so,很容易得出答案,n是奇数的时候 answer=n*(n-1)*(n-2);

考虑n%2==0,gcd(n,n-2)=2;

这时候考虑答案有几个呢???

我们知道n和n-2是偶数,n-1是奇数,n-3是奇数

first answer:n*(n-1)*(n-2)/2

那我说我有一个answer应该是比这个大:n*(n-1)*(n-3)

证:(n-3)>=(n-2)/2   n>=4  满足

但是不一定成立吧?

n-3和n-1一定互质?什么时候n和n-3互质呢?

同上我们很容易知道,gcd(n,n-3)<=3,1有,2不可能(n-3是奇数啊),所以只有3了

n%3!=0的时候,那就互质了。

那么如果不互质了呢?

second answer:n*(n-1)*(n-3)/3

还有一个答案:(n-1)*(n-2)*(n-3) 这个数一定比 n*(n-1)*(n-3)/3 这个大的情况很好说明 且 明显小于n*(n-1)*(n-3)也很好说明:

即证明(n-2)>=n/3    =>   2*n>=6   => n>=3,而这边考虑的都是n>3,所以一定满足;

而且这三个数都是两两互质。

so code:

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
int main()
{
LL n;
scanf("%lld",&n);
if(n<=3)
printf("%lld\n",n);
else if(n%2==1)
{
printf("%lld\n",n*(n-1)*(n-2));
}
else if(n%3!=0)
{
printf("%lld\n",n*(n-1)*(n-3));
}
else
{
printf("%lld\n",(n-1)*(n-2)*(n-3));
}
return 0;
}

最新文章

  1. Java三大框架 介绍
  2. [WCF编程]10.操作:事件
  3. C程序运行计时
  4. 胡说REST(REpresentational State Transfer)
  5. MyBatis 查询记录时日期字段没有时分秒
  6. DataTable与DataSet
  7. Android 下载文件及写入SD卡
  8. win 8.1 安装framework3.5
  9. easyui datagrid 学习
  10. [转]Windows的窗口刷新机制
  11. object sender ,EventArs e
  12. java学习系列(一)Java中的IO操作
  13. UIButton set touch handler in code
  14. (原创)(C#随笔)IEnumerable&lt; ICollection &lt; IList区别
  15. SORT函数的使用方法(转载)
  16. baseFileWriter.go
  17. CRC码计算及校验原理的最通俗诠释
  18. tinyweb集成springmvc 的一种可行方式
  19. 100base-T
  20. js-权威指南学习笔记14

热门文章

  1. 学习HTML5
  2. bootstrap中使用日历控件
  3. Java_异常_02_java.lang.NoClassDefFoundError: org/apache/log4j/Level
  4. jQuery 参考手册 - 选择器
  5. SQL-INSERT INTO用法
  6. Link-cut-tree 学习记录 &amp; hdu4010
  7. 洛谷P4721 【模板】分治 FFT(生成函数+多项式求逆)
  8. asp.net分页asp.net无刷新分页高效率分页
  9. druid数据源的加密解密工具
  10. 问题4:对dict、list、tuple中的元素排序