poj3292(筛选法)

来源:互联网 发布:最全双色球缩水软件 编辑:程序博客网 时间:2024/06/12 20:37
/*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;elseh[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;}

0 0
原创粉丝点击