1006 漂亮数 素数筛性质:筛法过程中本身就有一个素数 前缀和预处理 数论
链接:https://ac.nowcoder.com/acm/contest/26656/1006
来源:牛客网
题目描述
输入描述:
输出描述:
共输出 t t\ t 行,每行为一个整数,代表 l l\ l 到 r r\ r 中漂亮数的数量。
分析
素数筛中primes[j] 本身就是一个素数,如果i 也是素数,primes[j] * i 就是漂亮数。
同一个漂亮数,有没有可能是另外两个素数的乘积呢? 质因数分解,既然两个质数的乘积就是这个数,那就不会有别的质数的乘积是这个数。
然后前缀和预处理一下,得到每个区间内漂亮数的数量
//-------------------------代码----------------------------
//#define int ll
const int N = 1e8+10;
int n,m;
int primes[N],res[N],cnt;
bool st[N];
void solve()
{
int l,r;
cin>>l>>r;
cout<<res[r] - res[l - 1]<<endl;
}
signed main(){
clapping();TLE;
for(int i = 2;i<=N;i++) {
if(!st[i]) {
primes[cnt ++ ] = i;
}
for(int j = 0;primes[j] * i <= N ;j ++) {
st[primes[j] * i] = 1;
if(!st[i])res[primes[j] * i] = 1;
if(i % primes[j] == 0) break;
}
}
for(int i = 1;i<=N;i++) {
res[i] += res[i-1];
}
int t;cin>>t;while(t -- )
solve();
// {solve(); }
return 0;
}
/*样例区
*/
//------------------------------------------------------------