题意很简单,但数据量巨大,出题人给了4s.利用唯一分解定理和1-n数字因子的特点去解决。
详见代码,很容易理解。、
#include <iostream>
#include<algorithm>
#include<stdio.h>
#include<map>
#include<iomanip>
#include<string.h>
#define ll long long
#define inf 0x3f3f3f3f
#define mod 100000007
using namespace std;
bool isprime[100000005];
int ans[10000005];
int prime[10000005],top;
void check()
{
for(int i=2; i<100000005; i++)
{
if(isprime[i]==0)
prime[top++]=i;
for(int j=0; j<top&&prime[j]*i<100000005; j++)
{
isprime[i*prime[j]]=1;
if(i%prime[j]==0)
break;
}
}
}
ll n;
int main()
{
check();
while(~scanf("%lld",&n))
{
ll sum=1;
for(int i=0; i<top; i++)
{
ll tt=n;
if(prime[i]>n)
break;
while(tt>=prime[i])
{
tt/=prime[i];
sum*=prime[i];
sum%=mod;
}
}
printf("%lld\n",sum);
}
return 0;
}