中南大学校赛J(CSU2327)——质数筛+并查集

题目链接:http://acm.csu.edu.cn:20080/csuoj/problemset/problem?pid=2327

大意:给你一个[A,B]的区间(1<=A<B<=1e12),给你一个素数P,对于每一个大于等于P的素数,如果区间中有两个数i,j是素数p的倍数,则i,j所在的集合应该合并。初始时每个数都是一个集合,问你最后会有多少个集合。

A, B, P, (1 ≤ A ≤ B ≤ 1e12, B ≤ A + 1e6, 2 ≤ P ≤ B)

思路:注意到B-A<=1e6,所以整个区间长度不超过1e6,则对于大于等于1e6的素数,它在集合中至多只有一个倍数,不会产生合并操作,所以都可以忽略。所以可以筛选1e6内的素数,用1e6的并查集映射[A,B]区间,对于每一个满足条件的素数,它的倍数都应该在一个集合中,直接做合并操作即可。

最后没写出来是因为不知道怎么写从A(1e12)开始的遍历。。。。以后要记住,可以用now=A/p[i]得到第一个小于等于A的p[i]的倍数,那么如果小于,now++就可以得到第一个大于A的倍数了。。。。。。。

#include <cstdio>
#include <cstring>
#include <
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值