100000005 - smallest multiple
一般我们用辗转相除法求两个数的最小公倍数,现在NOI的竞赛规则允许调用内置的__gcd
函数。
我们的问题是,求出从1到n所有自然数的最小公倍数。
输入
n。
测试点1:n=20
测试点2:n=30
测试点3:n=42
输出
样例
输入
10
输出
2520
提示
a、利用公式:lcm(a,b)=a*b/gcd(a,b)求出lcm(a,b),而后求gcd(lcm(a,b),c)……直到得到最后结果。
b、对a,b,c,d...每个数进行质因数分解,而后求所有质因数最高次幂的乘积。
因为这个问题在n=43时就已经溢出了,所以一般我们采用a算法就没问题,b算法也是可行算法,但编码量大,使用unordered_map等结构,导致其实际运行效率并不比第一种好。