Problem 洛谷P1621-集合

Accept:496  Submit: 1.4k

Time Limit: 1000 mSec    Memory Limit : 128MB

Problem Description

现在给你一些连续的整数,它们是从A到B的整数。一开始每个整数都属于各自的集合,然后你需要进行一下的操作:

每次选择两个属于不同集合的整数,如果这两个整数拥有大于等于P的公共质因数,那么把它们所在的集合合并。

反复如上操作,直到没有可以合并的集合为止。

现在Caima想知道,最后有多少个集合。

 Input

一行,三个整数A,B,P。

【数据规模】

A≤B≤100000;

2≤P≤B。

 Output

  一个数,表示最终集合的个数。

 Sample Input

10 20 3

Sample output

7

题目链接:https://www.luogu.org/problemnew/show/P1621

题解:水题,之所以记录一下是因为感觉自己在做这道题的时候才感觉真的弄明白了欧拉筛的证明,以前会证明,但是感觉是只是机械化的证明,没有自己的理解。

我认为证明中最精华的一句话是,在i%prime[j] == 0,之前,prime[j]均为i*prime[j]的最小素因子,这个结论很显然,但是起到了决定性作用......

筛完素数就是简单的并查集。

 #include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
using namespace std; const int maxn = +;
bool is_prime[maxn];
int tot,prime[maxn];
int pre[maxn];
int a,b,p; void get_Prime(){
memset(is_prime,true,sizeof(is_prime));
is_prime[] = is_prime[] = false;
tot = ;
for(int i = ;i < maxn-;i++){
if(is_prime[i]) prime[tot++] = i;
for(int j = ;j<tot && prime[j]<=maxn/i;j++){
is_prime[i*prime[j]] = false;
if(i%prime[j] == ) break;
}
}
} int findn(int x){
return x == pre[x] ? x : pre[x] = findn(pre[x]);
} void merge_node(int x,int y){
int fx = findn(x),fy = findn(y);
if(fx != fy){
pre[fx] = fy;
}
} int main()
{
//freopen("input.txt","r",stdin);
get_Prime();
scanf("%d%d%d",&a,&b,&p);
for(int i = a;i <= b;i++){
pre[i] = i;
}
int pos = lower_bound(prime,prime+tot,p)-prime;
for(int i = pos;prime[i] <= b;i++){
for(int j = ;j*prime[i] <= b;j++){
if((j-)*prime[i] < a) continue;
merge_node((j-)*prime[i],j*prime[i]);
}
}
int cnt = ;
for(int i = a;i <= b;i++){
if(pre[i] == i) cnt++;
}
printf("%d\n",cnt);
return ;
}

洛谷P1621-集合的更多相关文章

  1. 洛谷——P1621 集合

    P1621 集合 题目描述 现在给你一些连续的整数,它们是从A到B的整数.一开始每个整数都属于各自的集合,然后你需要进行一下的操作: 每次选择两个属于不同集合的整数,如果这两个整数拥有大于等于P的公共 ...

  2. 洛谷 P1621 集合

    目录 题目 思路 \(Code\) 题目 P1621 集合 思路 并查集+埃氏筛,一开始连通块的个数是\(b-a+1\)个,在筛素数的过程中只要当前素数大于\(p\)就对该素数筛出来的数进行判断,如果 ...

  3. 洛谷P1621 集合 [2017年6月计划 数论13]

    P1621 集合 题目描述 现在给你一些连续的整数,它们是从A到B的整数.一开始每个整数都属于各自的集合,然后你需要进行一下的操作: 每次选择两个属于不同集合的整数,如果这两个整数拥有大于等于P的公共 ...

  4. 洛谷 P1466 集合 Subset Sums Label:DP

    题目描述 对于从1到N (1 <= N <= 39) 的连续整数集合,能划分成两个子集合,且保证每个集合的数字和是相等的.举个例子,如果N=3,对于{1,2,3}能划分成两个子集合,每个子 ...

  5. 洛谷P1466 集合 Subset Sums

    P1466 集合 Subset Sums 162通过 308提交 题目提供者该用户不存在 标签USACO 难度普及/提高- 提交  讨论  题解 最新讨论 暂时没有讨论 题目描述 对于从1到N (1 ...

  6. 洛谷P1491 集合位置 [最短路,SPFA]

    题目传送门 题目描述 每次有大的活动,大家都要在一起“聚一聚”,不管是去好乐迪,还是避风塘,或者汤姆熊,大家都要玩的痛快.还记得心语和花儿在跳舞机上的激情与释放,还记得草草的投篮技艺是如此的高超,还记 ...

  7. 洛谷 P2415 集合求和【数学公式/模拟】

    给定一个集合s(集合元素数量<=30),求出此集合所有子集元素之和. 输入输出格式 输入格式: 集合中的元素(元素<=1000) 输出格式: 和 输入输出样例 输入样例#1: 2 3 输出 ...

  8. 洛谷 P1491 集合位置

    P1491 集合位置 题目描述 每次有大的活动,大家都要在一起“聚一聚”,不管是去好乐迪,还是避风塘,或者汤姆熊,大家都要玩的痛快.还记得心语和花儿在跳舞机上的激情与释放,还记得草草的投篮技艺是如此的 ...

  9. 洛谷P2415 集合求和

    题目描述 给定一个集合s(集合元素数量<=30),求出此集合所有子集元素之和. 输入输出格式 输入格式: 集合中的元素(元素<=1000) 输出格式: 和 输入输出样例 输入样例#1: 2 ...

  10. 洛谷P1978 集合 [2017年6月计划 数论08]

    P1978 集合 题目描述 集合是数学中的一个概念,用通俗的话来讲就是:一大堆数在一起就构成了集合.集合有如 下的特性: •无序性:任一个集合中,每个元素的地位都是相同的,元素之间是无序的. •互异性 ...

随机推荐

  1. MySQL储存过程

    储存过程 本文章原创,转载需注明出处. 前提: 在大型数据库中 来源: 为了完成特定功能的SQL语句集 定义: 储存在数据库中, 用户通过指定储存过程的名字并给出参数(带有参数的)来执行它 声明: 储 ...

  2. MAC ACL、RACL和VACL

    拓扑结构: 配置IP地址.VLAN及路由: SW1(config)#int range f0/1 - 2SW1(config-if-range)#switchport mode accessSW1(c ...

  3. 动态规划法(三)子集和问题(Subset sum problem)

      继续讲故事~~   上次讲到我们的主人公丁丁,用神奇的动态规划法解决了杂货店老板的两个找零钱问题,得到了老板的肯定.之后,他就决心去大城市闯荡了,看一看外面更大的世界.   这天,丁丁刚回到家,他 ...

  4. APiCloud学习

    端API调用 核心模块在 window.api 对象下,默认提供该模块,不需要单独引用. 扩展模块在相应的模块对象下(例如:文件系统模块在fs对象下),需要require引入(var fs = api ...

  5. IOS中input键盘事件支持的解决方法

    欢迎大家去我的网站详细查看http://genghongshuo.com.cn/ IOS中input键盘事件keyup.keydown.等支持不是很好, 用input监听键盘keyup事件,在安卓手机 ...

  6. ModBus通信协议的【主从模式】

    主从模式 (1) 至少且只有一个主机,其他的都是从机 (2) 不管任何时候,从机都不能主动向主机发送数据 (3) 主机具有访问从机的权限,从机不可以主动访问从机,任何一次数据交换,都要由主机发起 (4 ...

  7. CLR,GC 表示什么意思?

    CLR常用简写词语,CLR是公共语言运行库(Common Language Runtime)和Java虚拟机一样也是一个运行时环境,它负责资源管理(内存分配和垃圾收集等),并保证应用和底层操作系统之间 ...

  8. 转载 基于JAVA每月运势api调用代码实例

    代码描述:基于JAVA每月运势api调用代码实例 接口地址:http://www.juhe.cn/docs/api/id/58 原文链接:http://outofmemory.cn/code-snip ...

  9. 总结:JDK1.5-JDK1.8各个新特性

    JDK1.5-JDK1.8各个新特性 JDK各个版本的新特性 要了解一门语言,最好的方式就是要能从基础的版本进行了解,升级的过程,以及升级的新特性,这样才能循序渐进的学好一门语言.以下介绍一下JDK1 ...

  10. fast-spring-boot快速开发项目

    Introduction fast-spring-boot 集成Spring Boot 2.1,Mybatis,Mybatis Plus,Druid,FastJson,Redis,Rabbit MQ, ...