POJ 3292 Semi-prime H-numbers

http://poj.org/problem?id=3292

题意 :表示这个题我真的没看懂。。。大意是讲:对于4*n+1(n为自然数)组成的集合H-numbers,乘法在该集合中是封闭的,在该集合内,只能被1和自身整除的为H-primes,然后由两个 H-primes的乘积为H-semi-prime,给你一个数k,让你求从1到k有多少个H-semi-prime。

思路 :一开始没看懂题也就不知道意思,其实看来这道题就是枚举嘛。

#include <iostream>

#include <string.h>



using namespace std;



const int maxn = 1000201 ;

int h_prime[maxn] ;

int h_number[maxn] ;



void prime()

{

    int cnt ;

    for(int i = 5 ; i < maxn ; i += 4)

        for(int j = 5 ; j < maxn ; j += 4)

        {

            cnt = i*j ;

            if(cnt > maxn)

                break ;

            if(h_prime[i] == 0&&h_prime[j] == 0)

                h_prime[cnt] = 1 ;

            else h_prime[cnt] = 2 ;

        }

}

int main()

{

    memset(h_prime,0,sizeof(h_prime)) ;

    prime() ;

    int cnt = 0 ;

    for(int i = 1 ; i < maxn ; i++)

    {

        if(h_prime[i] == 1)

            cnt++ ;

        h_prime[i] = cnt ;

    }

    int k ;

    while(cin>>k && k)

    {

        cout<<k<<" "<<h_prime[k]<<endl ;

    }

    return 0;

}
View Code

 

你可能感兴趣的:(number)