码迷,mamicode.com
首页 > 其他好文 > 详细

POJ 3292 Semi-prime H-numbers

时间:2018-05-20 18:16:27      阅读:129      评论:0      收藏:0      [点我收藏+]

标签:i++   name   color   names   print   tar   include   ble   turn   

题目描述

考虑到H-素数的定义与素数类似,那么能否用一种类似于筛素数的方式筛出所有的H-素数呢?

假设i是H-素数,那么i*(4*n+1)一定是H数且不是H-素数。

那么就可以筛出所有的H-素数,进而求出所有的H-合成数。

#include<complex>
#include<cstdio>
using namespace std;
const int N=1e6+7;
int tot;
int H[N],a[N];
bool is[N],check[N];
int qread()
{
    int x=0;
    char ch=getchar();
    while(ch<0 || ch>9)ch=getchar();
    while(ch>=0 && ch<=9){x=x*10+ch-0;ch=getchar();}
    return x;
}
int main()
{
    for(int i=5;i<N;i+=4)
    {
        if(check[i])continue;
        H[++tot]=i;
        for(int j=i*5;j<N;j+=i*4)
            check[j]=1;
    }
    for(int i=1;i<=tot;i++)
        for(int j=1;j<=i && H[i]*H[j]<N;j++)
            is[H[i]*H[j]]=1;
    for(int i=1;i<N;i++)
        a[i]=a[i-1]+is[i];
    int x;
    while(1)
    {
        x=qread();
        if(!x)break;
        printf("%d %d\n",x,a[x]);
    }
    return 0;
}

 

POJ 3292 Semi-prime H-numbers

标签:i++   name   color   names   print   tar   include   ble   turn   

原文地址:https://www.cnblogs.com/LeTri/p/9063702.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!