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; }