// UVa 11408 - Count DePrimes
#include <iostream>
#include <string.h>
using namespace std;
#define integer unsigned long long
integer T[5000001];
integer sum[5000001];
bool is_prime[5000001];
int main() {
memset(is_prime, true, sizeof(is_prime));
memset(sum, 0, sizeof(sum));
// sieve
for (integer i = 2; i <= 5000000; i++)
if (is_prime[i]) {
for (integer j = (i << 1); j <= 5000000; j += i) {
is_prime[j] = false;
sum[j] += i;
}
}
// DePrimes
T[0] = 0;
T[1] = 0;
for (integer i = 2; i <= 5000000; i++)
if (is_prime[i] || is_prime[sum[i]])
T[i] = T[i - 1] + 1;
else
T[i] = T[i - 1];
// input/output
integer a, b;
while ((cin >> a) && a) {
cin >> b;
cout << T[b] - T[a - 1] << endl;
}
return 0;
}
Friday, December 18, 2015
UVa 11408 - Count DePrimes
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment