num[i] = 0 表示 i 不是质数。
所有质数存在prim数组里,像prim前五个为2,3,5,7,11。
table 函数就已经能求出所有质数了。
#include<bits/stdc++.h>
using namespace std;
#define N 80010000
#define ll long long
int num[N], prim[5000060];
int pn = 0;
void table(){
memset(num, -1, sizeof(num));
for(int i = 2;i < N;i++){
if(num[i])
prim[pn++] = i;
for(int j = 0;j < pn && 1LL*i*prim[j] < N;j++){
num[i*prim[j]] = 0;
if(i % prim[j] == 0) break;
}
}
}
int main(){
table();
int i;
int n;
ll res=1,mod=1e9+7;
cin>>n;
if(n<6){cout<<"empty";return 0;}
for(i=1;prim[i]<=n/2;i++){
ll p=prim[i],temp=1;
while(temp*p<=n/2)
temp*=p;
res=res*temp%mod;
}
ll temp2=1;
while(temp2*2<=n/3)
temp2*=2;
res=res*temp2%mod;
cout<<res;
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/103191.html