lcm(1,2,…,n+1)=(n+1)lcm(C(n,0), C(n,1), …, C(n, n))
求1到n的lcm 从1扫到n 当i能拆成a^b,a为质数时lcm[i] = lcm[i-1]*a否则lcm[i] = lcm[i-1];
#include<cstdio>
#include<algorithm>
#include<iostream>
#define LL long long
#define mod 1000000007ll
#define maxn 1000005
using namespace std;
LL ans[maxn];
int sym[maxn];
bool ok(LL i)
{
LL pre = sym[i];
while(i%pre==0)i/=pre;
return i==1;
}
void getPrime()
{
for(int i=2;i<=maxn;i++)sym[i] = i;
for(int i=2;i<=maxn;i++)
if(sym[i]==i)
for(int j=i+i;j<=maxn;j+=i)
sym[j] = i;
}
LL fastMod(LL a,LL am)
{
LL ans = 1;
while(am)
{
if(am&1ll)ans*=a;
ans%=mod;
a*=a;
a%=mod;
am>>=1ll;
}
return ans;
}
int main()
{
ans[1] = 1;
getPrime();
for(int i=2;i<=maxn;i++)
{
ans[i] = ans[i-1];
if(ok(i))ans[i] = ans[i]*sym[i]%mod;
}
int t;
scanf("%d",&t);
while(t--)
{
LL n;
scanf("%I64d",&n);
printf("%I64d\n",ans[n+1]*fastMod(n+1,mod-2)%mod);
}
return 0;
}