LOJ 6165. 一道水題 (線性篩)
阿新 • • 發佈:2019-02-18
題目描述
傳送門
題目大意:求出能整除[1,n]中所有數的最小整數,對100000007取模。
題解
實際上就是求[1,n]中所有數的最小公倍數,最小公倍數等於
即所有質因子最大冪次的乘積。
剛開始覺得
程式碼
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#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);
}