线性筛求质数表

导读:本篇文章讲解 线性筛求质数表,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

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

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!