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

来源:互联网 发布:法语网络教学视频 编辑:程序博客网 时间:2024/06/06 08:50

题目描述

传送门

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

题解

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

代码

#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#define N 100000003#define MX 10000#define LL long long #define p 100000007using 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);}
原创粉丝点击