POJ-3292-Semi-prime H-numbers

来源:互联网 发布:防水js最新免费配方 编辑:程序博客网 时间:2024/04/29 08:47

题意比较简单,这个题跟筛素数差不多,后面我用的树状数组进行维护~

代码:

#include<cstdio>#include<cstring>#include<iostream>using namespace std;const int maxn=1e6+10;int t[maxn],cnt;long long pri[maxn];bool ispri[maxn],vis[maxn];int lowbit(int x){    return x&(-x);}void update(int index,int val){    for(;index<maxn;t[index]+=val,index+=lowbit(index));}int Sum(int index){    int sum=0;    for(;index>0;sum+=t[index],index-=lowbit(index));    return sum;}void Init(){    cnt=0;    int cou=0;    for(int i=1;4*i+1<maxn;i++)if(!ispri[i*4+1]){    int val=i*4+1;    for(int j=2;j*val<maxn;j++)ispri[val*j]=1;    pri[cnt++]=val;}    for(int i=0;i<cnt;i++)for(int j=i;j<cnt;j++){    if(pri[i]*pri[j]>maxn)break;    if(!vis[pri[i]*pri[j]])    {update(pri[i]*pri[j],1);vis[pri[i]*pri[j]]=1;    }}}int main(){    Init();    int n;    while(scanf("%d",&n)&&n)    {printf("%d %d\n",n,Sum(n));    }    return 0;}


0 0
原创粉丝点击