LOJ 6165. 一道水题 (线性筛)

题目描述

传送门

题目大意:求出能整除[1,n]中所有数的最小整数,对100000007取模。

题解

实际上就是求[1,n]中所有数的最小公倍数,最小公倍数等于 pimax(qi)
即所有质因子最大幂次的乘积。
刚开始觉得 108 的线性筛不能过,然而LOJ的评测机比较快,所有直接做就可以了

代码

#include
#include
#include
#include
#define N 100000003
#define MX 10000
#define LL long long 
#define p 100000007
using namespace std;
bool pd[N];
int n,prime[6000000];
int main()
{
    scanf("%d",&n); LL ans=1;
    for (int i=2;i<=n;i++) {
        if (!pd[i]) {
            prime[++prime[0]]=i;
            LL t=i;
            while (t*(LL)i<=n) t*=i;
            ans=ans*t%p;
        }
        for (int j=1;j<=prime[0];j++) {
            int k=i*prime[j];
            if (k>n) break;
            pd[k]=1;
            if (i%prime[j]==0) break;
        }
    }
    printf("%lld\n",ans);
}

你可能感兴趣的:(数论)