题目描述
传送门
题目大意:求出能整除[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 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);
}