Ranking (as of 2013-12-28): 121 out of 608
Language: C++
/* UVa 11105 - Semi-prime H-numbers To build using Visual Studio 2012: cl -EHsc -O2 UVa_11105_Semi_prime_H_numbers.cpp */ #include <iostream> using namespace std; const int h_nr_max = 1000001; int h_numbers[h_nr_max + 1]; // h_numbers[i] is the number of product of H-numbers int semi_prime_h_numbers[h_nr_max + 1]; // semi_prime_h_numbers[i] is the number of semi-prime H-numbers up to i int main() { for (int i = 5; i <= h_nr_max; i += 4) { if (!h_numbers[i]) h_numbers[i] = 1; for (int j = 5; j <= i && i * j <= h_nr_max; j += 4) h_numbers[i * j] = h_numbers[i] + h_numbers[j]; } #ifdef DEBUG int prime_h_numbers = 0; #endif for (int i = 5; i <= h_nr_max; i += 4) { semi_prime_h_numbers[i] = semi_prime_h_numbers[i - 4]; if (h_numbers[i] == 2) semi_prime_h_numbers[i]++; #ifdef DEBUG else if (h_numbers[i] == 1) prime_h_numbers++; #endif } #ifdef DEBUG cout << prime_h_numbers << ' ' << semi_prime_h_numbers[h_nr_max] << endl; #endif while (true) { int h; cin >> h; if (!h) break; cout << h << ' ' << semi_prime_h_numbers[h] << endl; } return 0; }