题目地址
一群小青蛙呱蹦呱蹦呱
代码实现
#include<iostream>
#include<math.h>
using namespace std;
typedef long long ll;
#define MOD 1000000007
#define MAXN 90000000
bool notprime[MAXN];//false表示素数
int prime[MAXN];
ll cnt=0;
int n;
long long ksm(int base,int pow){
ll res=1;
while(pow){
if(pow&1) res=res*base%MOD;
base=base*base%MOD;
pow>>=1;
}
return res;
}
int cal(ll x){//计算出每个指数
return floor(log(n/2)/ log(x));
}
int main()
{
cin>>n;
ll re=1;
if(n<6){
cout<<"empty";
return 0;
}
for(int i=2;i<=n/2;i++){//欧拉筛
if(!notprime[i]){
prime[cnt++]=i;
if(i == 2)
re=re*ksm(2,floor(log(n/3)/ log(2)))%MOD;
else
re=re*ksm(i,cal(i))%MOD;
}
for(int j=0 ; j<cnt && i*prime[j]<=n/2 ; j++){
notprime[i*prime[j]]=true;
if(i%prime[j] == 0) break;
}
}
cout<<re;
return 0;
}