几天以前,我学习了最小公倍数。玩得挺久了,想换换口味。
我不想用太多的数字,我想从1到n中选三个数字(可以相同)。使得他们的最小公倍数最大。
Input
单组测试数据。
第一行有一个整数n (1≤n≤1,000,000)。
Output
输出一个整数表示选三个数字的最大的最小公倍数。
Input示例
9
7
Output示例
504
210
思路:任意的两个相邻自然数肯定互质 任意两个相邻的奇数肯定互质
当 n 为奇数时 n 和 n-1肯定互质 n-1 和 n-2 肯定互质 n 和 n-2 也互质
所以 LCM 为 n*(n-1)*(-2)
当 n 为 偶数时 n 和 n-1 肯定互质 考虑 和 n-3 的关系 如果和 n-3 也互质的话 LCM 就是 n*(n-1)*(n-3)
如果 和 n-3 不互质 只能 将 n 向后移一位 否则 LCM不是最大 这时候输出 (n-1)*(n-2)*(n-3)
1 #include <cstdio> 2 #include <cctype> 3 4 typedef unsigned long long LL; 5 6 LL n; 7 8 int hh() { 9 scanf("%lld",&n); 10 11 if(n<=2) { 12 printf("%lld\n",n); 13 return 0; 14 } 15 16 if(n&1) printf("%lld\n",(LL)n*(n-1)*(n-2)); 17 else { 18 if(n%3==0) printf("%lld\n",(LL)(n-1)*(n-2)*(n-3)); 19 else printf("%lld\n",(LL)n*(n-1)*(n-3)); 20 } 21 22 return 0; 23 } 24 25 int sb=hh(); 26 int main(int argc,char**argv) {;}