#线性筛,质数#LOJ 6165 一道水题

题目

\((lcm_{i=1}^ni)\bmod 10^8+7,n\leq 10^8\)


分析

考虑对于某个质数\(p\),在\(n\)范围内做出的最大贡献为\(p^k(p^k\leq n)\)
线性筛出所有质数求它的最大指数幂再相乘即可


代码

#include <cstdio>
#define rr register
using namespace std;
const int N = 100000007;
int prime[N], n, ans, Cnt;
bool v[N];
signed main() {
    scanf("%d", &n), ans = 1;
    for (rr int i = 2; i <= n; ++i) {
        if (!v[i]) {
            prime[++Cnt] = i;
            rr int t = n;
            while (t >= i) t /= i, ans = 1ll * ans * i % N;
        }
        for (rr int j = 1; j <= Cnt && prime[j] <= n / i; ++j) {
            v[i * prime[j]] = 1;
            if (i % prime[j] == 0)
                break;
        }
    }
    return !printf("%d", ans);
}
posted @ 2020-10-20 10:48  lemondinosaur  阅读(74)  评论(0编辑  收藏  举报