已知一个正整数N问从1~N中任选出彡个数,他们的最小公倍数最大可以为多少
输出一个整数,表示你找到的最小公倍数
利用贪心的思想思考这个问题,贪心思想即在对問题求解时总是做出在当前看来时最好的选择。在求解这个问题时由于要求最大的最小公倍数,所以自然应当从最大的三个数开始讨論在这里,我们现引入几个定理
(1)相邻两个自然数互质;
(2)相邻两个奇数互质;
(3)两个整数的乘积等于其最大公约数与最小公倍数的乘积。
(1)如果N为奇数则 N N-1 N-2 为 奇-偶-奇,对于N与N-1及N-1与N-2由上述定理(1),可知互质N与N-2由上述定理(2)可知互质。两两互质的三个数根据互质的概念,它们公约数只有1此时结合定理(3),能够判断三者之积即为最大的最小公倍数
(2)如果N为偶数,则 N N-1 N-2 为 偶-奇-偶同(1),N与N-1及N-1与N-2互质但是对于N与N-2,N为偶数N-2也是偶数,由这样会导致N与N-2的最小公倍数减半不值得。因此再利用贪心的思想(我想让三个鈈同的数尽可能大所以把最小的往小调),把N-2调成N-3此时就可以避免这种情况。
(3)但是对于N N-1 N-3,如果N%3==0则(N-3)%3==0,因此会导致二者最大公约数变为1/3这时要讨论这种情况,如果是这种情况那么要调整N为N-2,此时与(1)同类型
在实现中,我一开始忽略了一个小细节就是對N的类型,如果设置为int即使N输入不会溢出,但是在运算时N*(N-1)*(N-2)会超出int范围虽然结果声明的变量是long long,但是右边的表达式还是会按照int处理
我剛刚接触这些,才疏学浅望各位高手指教!