题解:
很显然的做法就是求[1,n]所有数的最小公倍数
所以我们只需要把[1,n]中的每个素因子的最高次幂提取出来连乘即可
刚开始没看到模数是1e8+7,被坑了一次wa…
AC代码:
#pragma GCC optimize(2)
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int MOD = 100000007;
const int MAXN = 1e6+50;
const int INF = 0x3f3f3f3f;
int prime[MAXN]; bool vis[MAXN*100];
int main(){
//freopen("C:\\Users\\Administrator\\Desktop\\in.txt","r",stdin);
int n,cnt=0; LL ans=1; scanf("%d",&n);
for(int i=2;i<=n;i++){
if(!vis[i]){
prime[++cnt]=i;
LL tmp=i;
while(tmp*i<=n) tmp*=i;
ans = (ans*tmp)%MOD;
}
for(int j=1;j<=cnt && i*prime[j]<=n;j++){
vis[i*prime[j]]=true;
if(i%prime[j]==0) break;
}
}
printf("%lld\n",ans);
return 0;
}