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
*/
ACcode

 

posted @ 2021-03-11 09:14  bear_xin  阅读(22)  评论(0)    收藏  举报