long long lcm(int n) {
long long ans = 1; // 初始化答案为1,用于存储最终的最小公倍数
for (int p : primes) { // 遍历素数列表primes中的每个素数p
int k = 0; // 初始化k为0,用于计算2^k的值
while (p * (1 << k) <= n) { // 当p乘以2^k小于等于n时,继续增加k的值
++k;
}
ans *= p * (1 << --k); // 将p乘以2^(k-1)的结果乘到答案中
}
return ans; // 返回最终的最小公倍数
}