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

 

posted on 2013-11-24 16:24  枫、  阅读(208)  评论(0编辑  收藏  举报