51nod1419 【数学】
2024-08-27 20:35:14
思路:
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;
}
最新文章
- Java三大框架 介绍
- [WCF编程]10.操作:事件
- C程序运行计时
- 胡说REST(REpresentational State Transfer)
- MyBatis 查询记录时日期字段没有时分秒
- DataTable与DataSet
- Android 下载文件及写入SD卡
- win 8.1 安装framework3.5
- easyui datagrid 学习
- [转]Windows的窗口刷新机制
- object sender ,EventArs e
- java学习系列(一)Java中的IO操作
- UIButton set touch handler in code
- (原创)(C#随笔)IEnumerable<; ICollection <; IList区别
- SORT函数的使用方法(转载)
- baseFileWriter.go
- CRC码计算及校验原理的最通俗诠释
- tinyweb集成springmvc 的一种可行方式
- 100base-T
- js-权威指南学习笔记14
热门文章
- 学习HTML5
- bootstrap中使用日历控件
- Java_异常_02_java.lang.NoClassDefFoundError: org/apache/log4j/Level
- jQuery 参考手册 - 选择器
- SQL-INSERT INTO用法
- Link-cut-tree 学习记录 &; hdu4010
- 洛谷P4721 【模板】分治 FFT(生成函数+多项式求逆)
- asp.net分页asp.net无刷新分页高效率分页
- druid数据源的加密解密工具
- 问题4:对dict、list、tuple中的元素排序