2520 是最小的能被 1010 以内的正整数整除的正整数, 现在想问你, 能被小于等于 nn 的正整数整除的最小正整数是多少呢? 答案可能很大, 需要对 1000000007 求模.用c++解决
时间: 2024-02-11 11:07:08 浏览: 67
可以使用欧拉筛法求解。首先定义一个数组 `prime` 来存储质数,初始化为全 1。然后从 2 开始遍历到 n,如果 prime[i] 为 1 表示 i 是质数,将 i 存入 prime 数组中,同时将 i 的倍数标记为非质数。最后再遍历一次 prime 数组,求出能被小于等于 n 的正整数整除的最小正整数。
以下是 C++ 代码实现:
```cpp
#include <iostream>
#include <cstring>
using namespace std;
const int MOD = 1e9 + 7;
const int MAXN = 1e6;
int prime[MAXN + 5], cnt;
bool is_prime[MAXN + 5];
void get_prime(int n) {
memset(is_prime, true, sizeof(is_prime));
is_prime[0] = is_prime[1] = false;
for (int i = 2; i <= n; i++) {
if (is_prime[i]) {
prime[++cnt] = i;
}
for (int j = 1; j <= cnt && i * prime[j] <= n; j++) {
is_prime[i * prime[j]] = false;
if (i % prime[j] == 0) {
break;
}
}
}
}
int main() {
int n;
cin >> n;
get_prime(n);
long long ans = 1;
for (int i = 1; i <= cnt && prime[i] <= n; i++) {
int p = prime[i];
while (p <= n) {
p *= prime[i];
}
ans = ans * (p / prime[i]) % MOD;
}
cout << ans << endl;
return 0;
}
```
阅读全文