一群小青蛙呱蹦呱蹦呱
思路:
先线性筛出
7.5
e
7
7.5e7
7.5e7以内的所有素数,然后统计每个素数的贡献后相乘即可
对于素数2而言,最大的贡献是
2
k
∗
3
2^k*3
2k∗3
对于大于2的素数p而言,最大的贡献是
p
k
∗
2
p^k*2
pk∗2
代码:
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <bitset>
#define mod 1000000007;
using namespace std;
bitset <80000001> p;
int main(int argc, char** argv) {
int n;
cin >> n;
if(n<=5)
{
puts("empty");
return 0;
}
for(int i=2;i*i<=80000000;i++)
if(!p[i]) for(int j=i+i;j<=80000000;j+=i) p[j]=1;
int ans=1;
for(int i=3;i<=n/2;i++)
{
if(!p[i])
{
int now=i;
while((long long)now*i<=n/2) now*=i;
ans=(long long)ans*now%mod;
}
}
n/=3;
while(n>>=1) ans=(long long)ans*2%mod;
cout << ans;
return 0;
}