基础算法题——呼兰河传(除法不可直接求余)

博客探讨了如何解决寻找一组数中使LCM(最小公倍数)最大的问题,强调除法不可直接求余。正确方法是质因数分解并统计每个质因数的最大乘积次数,然后相乘。博主分享了解题步骤,包括初始化素数列表、质因数分解和使用快速幂求余计算答案。
摘要由CSDN通过智能技术生成
呼兰河传

题目描述
沿着河边看一看清冷的夏夜,耳机里是AR的《呼兰河传》。AR的呼兰河并非一条河,而是一个故乡小城的生活日记。静谧的童年,孩子看世界的眼光,花开鸟飞间的自由,塑造了一方那个时代中少有的美好。现在,你需要回答以下问题,才可倾听这首《呼兰河传》带来的温柔,试试吧。给你n个数,选择一些数,使得LCM最大,输出LCM的最大值并对1e9+9取模。
LCM:最小公倍数

输入描述:
第一行输入一个n,代表数字的个数。
第二行输入n个数a[i],代表每个数的值。
1<=n<=1e6,1<=a[i]<=1e5。

输出描述:
选择一些数能得到的最大LCM,由于LCM太大了,你只需要对1e9+9取模即可。
示例1
输入
3
1 2 3
输出
6
说明
选择2和3的LCM最大,为6


除法不可直接求余!
除法不可直接求余!
除法不可直接求余!

在赛中就直接将全部数进行求公倍数,中间不断求余,忽略了gcd函数中除法,哎~

#include<stdio.h>
#define ll long long
const ll mod=1e9+9;

ll gcd(ll a, ll b){
   
	if(a%b==0) return b;
	return gcd(b, a%b);
}

int main(){
   
	ll a, b, n, ans;
//	freopen("data.txt", "r", stdin);
	scanf("%lld%lld", &n, &ans);
	for(int i=1; i<n; i++){
   
		scanf("%lld", &a);
		b = gcd(ans, a);
		ans = ((ans/b)*a)%mod
1。打开功能是专门用于对C语言文件自动提取显示所需要的汉字,进行点阵码数据转换的, 在您的C语言程序中,有一点需要特别留意:您的注解中请不要使用双引号,否则会引起 提取错误。 软件包中的文件ee.c作为一个简单例程供提取测试用。 2。提取以后的点阵码可以随意修改点阵数据,使用鼠标的左键为加一点,右键为擦除一点。 修改完毕请按旁边的确认键将数据记录到点阵码中,否则您的修改将自动放弃。 3。点阵码可以随意平移,请谨慎使用。平移之前请查看一遍所有的字符点阵图,平移有可能 会丢失边界点,移出了边界的点阵将被丢弃,不可恢复。 平移前请确认是否有必要进行全体字符一起移动。 4。用户自定义特殊字符的建立,首先选定点阵数据,在下面的汉字输入窗口输入几个您不使 用的汉字,确认。然后生成了这些汉字的点阵码,再将他们清空(使用平移按钮中间的那 块抹布),就可以用鼠标描绘你的图案了,最后别忘了打“确认”键。 5。ASCII字符可以自动提取0x20~0x7f的全部,最后一个0x7f一般都没有用,可以手工将它删 除,也可以利用它做一个简单的特殊字符。 汉字库中也包含有ascii字符,但是经查对与这三个ascii库基本一样,所以就不再重复。 6。保存文件:C语言格式的默认为.h类型,汇编格式的默认为.inc类型,只要将他们加入到 您的工程中就可以了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值