求多个数的最小公倍数的方法
两个数的LCM的常规求法为,两数之积/GCD,
对于多个数也可以分别以此方法求出。
但是对于数据量较大的数,LCM会超过数据范围,
此时可以采用,记录质因子的数量的方法。
用一个数组,记录全部质因子的最大数量。
然后遍历每个数,求出其全部质因子的数量,并更细全局的质因子最大数量。
最后将全部的质因子乘其数量次并相乘,此过程可以取模。

#include<bits/stdc++.h> #include<unordered_set> using namespace std; typedef long long LL; typedef pair<int, int> PII; #define fore(x,y,z) for(LL x=(y);x<=(z);x++) #define forn(x,y,z) for(LL x=(y);x<(z);x++) #define rofe(x,y,z) for(LL x=(y);x>=(z);x--) #define rofn(x,y,z) for(LL x=(y);x>(z);x--) LL cnt_prime[100010];//全局记录数据 LL MOD = 1e9 + 7; void Count(LL num)//添加某个数的全部质因子 { LL n = num; for (LL i = 2; i*i <= n; i++) { if (num%i == 0) { LL cnt = 0; while (num%i == 0) { cnt++; num /= i; } cnt_prime[i] = max(cnt, cnt_prime[i]); } } if (num) { cnt_prime[num] = max(1ll, cnt_prime[num]); } }