蓝桥杯练习系统—算法训练 最小最大公倍数

问题描述
已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少。

输入格式
输入一个正整数N。

输出格式
输出一个整数,表示你找到的最小公倍数。
样例输入
9
样例输出
504
数据规模与约定
1 <= N <= 106。

分析:

这个题的意思就是在1~N的范围内找三个数,使他们的最小公倍数在这个范围内的组合是最大的。

接下来先说一个结论:大于1的两个相邻的自然数必定互质。

而对于1~N的范围,肯定是 n*(n-1)*(n-2)的乘积最大、如果这三个数还两两互质的话那就最棒了。

如果n是奇数,那么 n、n-1、n-2必定两两互质,要是有些纠结的话,那么我们就分析在什么情况下可能会存在公因子。n是奇数,那么n,n-1,n-2一定是两奇加一偶的情况。公因子2直接pass,因为只有一个偶数。假设剩下的n,n-2中有一个数能被3整除,那么有公因子的数一定是n或n-2加减3才能得到的情况。为此,n,n-1,n-2的乘积不仅是最大的,而且一定两两互质。

如果n是偶数,继续分析n*(n-1)*(n-2),这样的话n和n-2必定有公因子2,那么就换成式子n*(n-1)*(n-3)。然后仔细思考一下,不行啊,若偶数本身就能被3整除的话,那么式子n*(n-1)*(n-3)也不成立了,n和n-3就有公因子3,再仔细思考一下,式子就变成了(n-1)*(n-2)*(n-3),两奇夹一偶的情况。

代码

#include<iostream>
using namespace std;
int main() {
    long long n, ans;
    while(cin >> n) {
        if(n <= 2) {
            ans = n;
        }
        else if(n % 2) {
            ans = n * (n - 1) * (n - 2);
        }
        else {
            if(n%3) ans = n * (n-1) * (n-3);
            else ans=(n-1) * (n-2) * (n-3);
        }
        cout << ans << endl;
    }
    return 0;
}   

原文地址:https://www.cnblogs.com/kindleheart/p/8418579.html

时间: 2024-10-09 21:32:09

蓝桥杯练习系统—算法训练 最小最大公倍数的相关文章

蓝桥杯练习系统— 算法训练 Beaver&#39;s Calculator

问题描述 从万能词典来的聪明的海狸已经使我们惊讶了一次.他开发了一种新的计算器,他将此命名为"Beaver's Calculator 1.0".它非常特别,并且被计划使用在各种各样的科学问题中. 为了测试它,聪明的海狸邀请了n位科学家,编号从1到n.第i位科学家给这个计算器带来了 ki个计算题.第i个科学家带来的问题编号1到n,并且它们必须按照编号一个一个计算,因为对于每个问题的计算都必须依赖前一个问题的计算结果. 每个教授的每个问题都用一个数 ai,?j? 来描述,i(1≤i≤n)是

蓝桥杯练习系统—算法训练 P1102

第一部分:题目 定义一个学生结构体类型student,包括4个字段,姓名.性别.年龄和成绩.然后在主函数中定义一个结构体数组(长度不超过1000),并输入每个元素的值,程序使用冒泡排序法将学生按照成绩从小到大的顺序排序,然后输出排序的结果. 输入格式:第一行是一个整数N(N<1000),表示元素个数:接下来N行每行描述一个元素,姓名.性别都是长度不超过20的字符串,年龄和成绩都是整型. 输出格式:按成绩从小到大输出所有元素,若多个学生成绩相同则成绩相同的同学之间保留原来的输入顺序.输入: 3 A

蓝桥杯练习系统—算法训练 s01串

第一部分:题目 问题描述 s01串初始为"0" 按以下方式变换 0变1,1变01 输入格式 1个整数(0~19) 输出格式 n次变换后s01串 样例输入 3 样例输出 101 数据规模和约定 0~19 第二部分:思路 循环+中间数组.有一点小小的技巧就是,0->1,1->01.就是都变成1,只不过原先是1的话在前面加一个0. 第三部分:代码 #include<iostream> #include<stdio.h> #include<string

蓝桥杯练习系统—算法训练 未名湖畔的烦恼

问题描述 每年冬天,北大未名湖上都是滑冰的好地方.北大体育组准备了许多冰鞋,可是人太多了, 每天下午收工后,常常一双冰鞋都不剩. 每天早上,租鞋窗口都会排起长龙,假设有还鞋的m个,有需要租鞋的n个. 现在的问题是,这些人有多少种排法,可以避免出现体育组没有冰鞋可租的尴尬场面. (两个同样需求的人(比如都是租鞋或都是还鞋)交换位置是同一种排法)输入格式 两个整数,表示m和n输出格式 一个整数,表示队伍的排法的方案数.样例输入3 2样例输出5数据规模和约定 m,n∈[0,18] 分析:枚举出所有情况

蓝桥杯练习系统算法提高 求最大值

问题描述 给n个有序整数对ai bi,你需要选择一些整数对 使得所有你选定的数的ai+bi的和最大.并且要求你选定的数对的ai之和非负,bi之和非负. 输入格式 输入的第一行为n,数对的个数 以下n行每行两个整数 ai bi 输出格式 输出你选定的数对的ai+bi之和 样例输入 5-403 -625-847 901-624 -708-293 413886 709 样例输出 1715 数据规模和约定 1<=n<=100 -1000<=ai,bi<=1000 思路: 讲道理好嘛~~自己

蓝桥杯软件大赛练习系统——算法训练 最小乘积(基本型)

************************************************************************ * 精品书籍推荐:<算法竞赛入门经典> * 该书对于ACMer几乎人手一本,所以在这里倾力推荐,读完这本书,我们就可以开始我们的算法征程了!!! * 看完上面那本书,还有一本它的升级版:<算法竞赛入门经典:训练指南> * 再读完这本书,你就超神了!!! *******************************************

蓝桥杯练习系统--入门训练+基础练习

入门训练 <1>Fibonacci数列 问题描述  Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1. 当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少. 输入格式  输入包含一个整数n. 输出格式  输出一行,包含一个整数,表示Fn除以10007的余数. 说明:在本题中,答案是要求Fn除以10007的余数,因此我们只要能算出这个余数即可,而不需要先计算出Fn的准确值,再将计算的结果除以10007取余数,直接计算余数往往比先算出原数再取

蓝桥杯练习系统算法提高—最大乘积

最大乘积  问题描述 对于n个数,从中取出m个数,如何取使得这m个数的乘积最大呢? 输入格式 第一行一个数表示数据组数 每组输入数据共2行: 第1行给出总共的数字的个数n和要取的数的个数m,1<=n<=m<=15, 第2行依次给出这n个数,其中每个数字的范围满足:a[i]的绝对值小于等于4. 输出格式 每组数据输出1行,为最大的乘积. 样例输入 1 5 5 1 2 3 4 2 样例输出 48 思路:将输入的数据存入数组然后做升序排列.然后开始从末端循环,每次循环都求出正序前两个数字的积和

蓝桥杯 算法训练 最小乘积(基本型) (水题,排序)

算法训练 最小乘积(基本型) 时间限制:1.0s   内存限制:512.0MB 问题描述 给两组数,各n个. 请调整每组数的排列顺序,使得两组数据相同下标元素对应相乘,然后相加的和最小.要求程序输出这个最小值. 例如两组数分别为:1 3 -5和-2 4 1 那么对应乘积取和的最小值应为: (-5) * 4 + 3 * (-2) + 1 * 1 = -25 输入格式 第一个行一个数T表示数据组数.后面每组数据,先读入一个n,接下来两行每行n个数,每个数的绝对值小于等于1000. n<=8,T<=