ABC 250 D

ABC 250 D

题意

求1到n范围内有以下性质的数的个数:
x=pq3 ,其中p和q都是质数,p<q.1n1018

思路

106内的质数筛出来,这就是q的范围,
然后这个q的贡献为nq3以内的质数个数,但要注意可能nq3比q还要大,这时候就只能选q以下的质数了。

代码

void get_prime() 
{
	for(int i=2;i<N;i++) 
	{
		if(!is[i]) prime[++cnt]=i;
		for(int j=1;j<=cnt&&i*prime[j]<N;j++) 
		{
			is[i*prime[j]]=1;
			if(i%prime[j]==0) break;
		}
	}
	for(int i=2;i<N;i++) sum[i]=sum[i-1]+(is[i]==0);
}

int cal(int x) //三次方根
{	
	int i=1;
	while(i*i*i<=n) i++;
	return i-1;
}

void solve() 
{
	get_prime();
	cin>>n;
	int limit=cal(n);
	for(int i=1;i<=cnt&&prime[i]<=limit;i++) 
	{
		int k=prime[i]*prime[i]*prime[i];
		int tmp=n/k;
		tmp=min(prime[i]-1,tmp);
		ans+=sum[tmp];
	}
	cout<<ans<<endl;
}

posted @   Liang2003  阅读(17)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示