蓝桥杯最小公倍数

相关题目:蓝桥杯最小公倍数

题目描述

为什么 1 小时有 60 分钟,而不是 100 分钟呢?这是历史上的习惯导致。但也并非纯粹的偶然:60 是个优秀的数字,它的因子比较多。
事实上,它是 1 至 6 的每个数字的倍数。即 1,2,3,4,5,6 都是可以除尽 60。
我们希望寻找到能除尽 1 至 n n n 的的每个数字的最小整数。\n\n不要小看这个数字,它可能十分大,比如 n n n = 100, 则该数为:69720375229712477164533808935312303556800\n\n

输入描述

输入一个数字 n n n

输出描述

输出出 1 ~ n n n 的最小公倍数。

输入输出样例

示例

输入
6
输出
60

//参照上一篇博客内容,提取主要成分,可以写出下面的代码:
//最小公倍数 new 
#include<iostream>
using namespace std;
int arr[50] = {0};
int num[101] = {0};
int main(){
	int n;
	cin>>n;
	for(int i = 1;i<=n;++i){
		num[i] = i;
	} 
	for(int i = 2;i<=n;++i){
		//对每个数分解,找到最小公因子
		for(int j = 1;j<i;++j){
			if(num[i]%num[j]==0){
				num[i]/=num[j];
			}
		} 
	}
	//得到最小公因子num[i]后,乘上去
	arr[0] = 1;
	for(int i = 1;i<=n;++i){
	//对每一个乘数num[i]进行乘法计算 
		int c=0,s=0;
		for(int j = 0;j<50;++j){
			s = arr[j]*num[i]+c;
			arr[j]=s%10;
			c = s/10;
		} 
	}
	//计算完毕
	
	//从后往前找,找到第一个非零的数 
	int i = 0;
	for(i = 49;i>=0;--i){
		if(arr[i]!=0){
			break;
		}
	} 
	//输出 
	for(int j=i ;j>=0;--j){
		cout<<arr[j];
	}
	
	return 0;
} 

解题关键

按照自前向后的顺序分解公因子

比如:
1 2 3 4 5 6
从2开始分解没变化,3没变化,4变化为:
1 2 3 2 5 6(4能整除2则除以2,那2和4公倍数表示就是2*2(4/2的结果))
5没有变化,6变化为:
1 2 3 2 5 1(6可以被前面的2和3整除,被分解了)

整数的乘法,注意是大数!

采用数组进行存储,结合进位循环递推给出每一位数字的结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值