SRM442 Underprimes
概要
1と自分自身を除く素因数の数が素数となる値が A <= i <= B まででいくつ存在するか求めよ。
解法
#include <bits/stdc++.h> using namespace std; #define MAX (100001) bool is_prime[MAX+10]; class Underprimes { public: void Sieve() { for(int i=0; i<=MAX; i++) { is_prime[i] = true; } is_prime[0] = is_prime[1] = false; for(long long i=2; i*i<=MAX; i++) { if(is_prime[i]) { for(long long j=i*i; j<=MAX; j+=i) { is_prime[j] = false; } } } } int countPrimeFact(int x) { int ret = 0; for(int i=2; i*i <= x; i++) { while(x % i == 0) { ret ++; x /= i; } } if(x!=1) ret++; return ret; } int howMany(int l, int u) { Sieve(); int ret = 0; for(int i=l; i<=u; i++) { ret += is_prime[countPrimeFact(i)]; } return ret; } };