xtu 1279 Dual Prime

发布时间:2024年01月11日

题目描述

如果一个合数x=p?q,p,q是素数且p≠q,我们称x是双素数。 现给你一个区间[a,b],求区间内的的双素数个数。

输入

第一行是一个整数T(1≤T≤30000),为样例的数目。 以后每行一个样例,为两个整数a,b(1≤a≤b≤106)

输出

依次每行输出一个样例的结果。

样例输入

3
1 10
1 100
1 1000000

样例输出

2
30
209867

AC代码

#include<stdio.h>
#define N 1000005
int a[N]={};
int f[N]={};
void init(){
	int i,j;
	a[0]=1,a[1]=1;
	//埃筛 
	for(i=2;i<N;i++){
		if(a[i]==0){
			for(j=2*i;j<N;j+=i){
				a[j]=1;
			}
		}
	}
	//计算f[i] 
	for(i=2;i<1005;i++){
	   if(a[i]==0){
	   	for(j=i+1;i*j<N;j++){
	   		if(a[j]==0){
	   			f[i*j]=1;
			   }
		}
	   }
	}
	//前缀和 
	for(i=0;i<N;i++){
		f[i]+=f[i-1];
	}
}
void sol(){
	int a,b;
	scanf("%d%d",&a,&b);
	printf("%d\n",f[b]-f[a-1]);
}
int main()
{
	int T;
	scanf("%d",&T);
	init();
	while(T--){
		sol();
	}
 } 

解题思路:利用前缀和知识,满足条件为1,前缀和累计即可。

文章来源:https://blog.csdn.net/m0_75005390/article/details/135541129
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。