/*
translation:
一个H-number是所有的模四余一的数。如果一个H-number是H-primes 当且仅当它的因数只有1和它本身(除1外)。
一个H-number是H-semi-prime当且仅当它只由两个H-primes的乘积表示。H-number剩下其他的数均为H-composite。
给你一个数h,问1到h有多少个H-semi-prime数。
solution:
直接打表输出
note:
注意这里的hPrime是在hNumber数系下,例如9在自然数系中不是素数,但是在hNumber下就为hPrime.
date:
2016.10.12
*/
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
using namespace std;
const int maxn = 1e6 + 1;
int h[maxn], n;
void init()
{
memset(h, 0, sizeof(h));
for(int i = 5; i <= maxn; i += 4) {
for(int j = 5; j <= maxn; j += 4) {
if(i*j > maxn) break;
if(h[i] == 0 && h[j] == 0) h[i*j] = 1;
else h[i*j] = -1;
}
}
int res = 0;
for(int i = 1; i <= maxn; i++) {
if(h[i] == 1) res++;
h[i] = res;
}
}
int main()
{
init();
while(~scanf("%d", &n) && n) {
printf("%d %d\n", n, h[n]);
}
return 0;
}
poj3292(筛选法)
最新推荐文章于 2019-04-13 10:00:00 发布