Almost Prime Numbers
题解:
1.能整除质数的不止有x(但是这里almost不包括x),还有x^k
2.从1~n判断是不是almost prime numbers肯定是会超时的
由于2^40~=1e12
所以应当枚举prime[i]^k的数种在l到r区间的

#include<iostream> #include<algorithm> #include<cstdio> using namespace std; const int N = 1000010; bool vis[N]; int cnt; long long prime[N]; void make_prime() { long long n = N; for(long long i = 2; i <= n; i++) { if(vis[i]) continue; prime[++cnt] = i; for(long long j = i*i; j < n; j += i) { vis[j] = 1; } } } int main() { make_prime(); int t; scanf("%d", &t); while(t--) { long long m, n; scanf("%lld %lld", &m, &n); long long ans = 0; for(int i = 1; i <= cnt; i++) { for(long long j = prime[i]*prime[i]; j <= n; j*=prime[i]) { if(j >= m) ans++; } } printf("%lld\n", ans); } return 0; } /* 3 1 10 1 20 1 5 */