Set 集合
【题目描述】
现在给你一些连续的整数,它们是从 A 到 B 的整数。一开始每个整数都属于各自
的集合,然后你需要进行如下操作:
每次选择两个属于不同集合的整数,如果这两个整数拥有大于等于 P 的公共质因
数,那么把它们所在的集合合并。
反复上述操作,直到没有可以合并的集合为止。
现在 Caima 想知道,最后有多少个集合。
【输入格式】
一行,三个整数 A,B,P。
【输出格式】
一个数,表示最终集合的个数。
【数据规模】
A<=B<=100000
2<=P<=B
【输入样例】
10 20 3
【输出样例】
7
【注意事项】
有 80%的数据 B<=1000。
样例解释{10,20,12,15,18},{13},{14},{16},{17},{19}。
对于两个个数,如果他们含有大于p的质因数,那么一定会被合并
我们发现集合可以按质因数分成很多,那么含有该因数的数会在这个集合
如果一个数同时含有两个因数,那么这两个区间会合并
于是就可以用并查集
可以枚举A~B,枚举质因数
假设一个数i有p1,p2,p3为质因数
把一个质因数的区间与前一个合并
这只有80分
如果枚举质因数,再枚举倍数,看一个倍数是否被其他倍数覆盖,是则合并
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
int A,B,P,tot,pri[],set[],cnt,st,flag,pre,num[];
bool vis[];
int find(int x)
{
if (set[x]!=x) set[x]=find(set[x]);
return set[x];
}
int main()
{int i,j;
cin>>A>>B>>P;
for (i=;i<=B;i++)
{
if (vis[i]==)
{
tot++;
pri[tot]=i;
}
for (j=;j<=tot;j++)
{
if (pri[j]*i>B) break;
vis[i*pri[j]]=;
if (i%pri[j]==) break;
}
}
memset(vis,,sizeof(vis));
for (i=;i<=tot;i++)
if (pri[i]>=P) break;
st=i;
for (i=st;i<=tot;i++)
set[i]=i;
for (i=st;i<=tot;i++)
{
int a=((A-)/pri[i]+);
int b=(B/pri[i]);
if (a<=b) vis[i]=;
for (j=a;j<=b;j++)
{
if (num[j*pri[i]]==) num[j*pri[i]]=i;
else
{
int p=find(i);
int q=find(num[j*pri[i]]);
if (p!=q)
{
set[p]=q;
}
}
}
}
for (i=A;i<=B;i++)
if (num[i]==) cnt++;
for (i=st;i<=tot;i++)
if (set[i]==i&&vis[i]==) cnt++;
cout<<cnt;
}
Set 集合的更多相关文章
- java基础集合经典训练题
第一题:要求产生10个随机的字符串,每一个字符串互相不重复,每一个字符串中组成的字符(a-zA-Z0-9)也不相同,每个字符串长度为10; 分析:*1.看到这个题目,或许你脑海中会想到很多方法,比如判 ...
- .Net多线程编程—并发集合
并发集合 1 为什么使用并发集合? 原因主要有以下几点: System.Collections和System.Collections.Generic名称空间中所提供的经典列表.集合和数组都不是线程安全 ...
- 一起学 Java(三) 集合框架、数据结构、泛型
一.Java 集合框架 集合框架是一个用来代表和操纵集合的统一架构.所有的集合框架都包含如下内容: 接口:是代表集合的抽象数据类型.接口允许集合独立操纵其代表的细节.在面向对象的语言,接口通常形成一个 ...
- 编写高质量代码:改善Java程序的151个建议(第5章:数组和集合___建议75~78)
建议75:集合中的元素必须做到compareTo和equals同步 实现了Comparable接口的元素就可以排序,compareTo方法是Comparable接口要求必须实现的,它与equals方法 ...
- java基础_集合List与Set接口
List接口继承了Collection的方法 当然也有自己特有的方法向指定位置添加元素 add(索引,添加的元素); 移除指定索引的元素 remove(索引) 修改指定索引的元素 set ...
- Java基础Collection集合
1.Collection是所有集合的父类,在JDK1.5之后又加入了Iterable超级类(可以不用了解) 2.学习集合从Collection开始,所有集合都继承了他的方法 集合结构如图:
- 轻量级“集合”迭代器-Generator
Generator是PHP 5.5加入的新语言特性.但是,它似乎并没有被很多PHP开发者广泛采用.因此,在我们了解PHP 7对Generator的改进之前,我们先通过一个简单却显而易见的例子来了解下G ...
- Asp.net MVC 传递数据 从前台到后台,包括单个对象,多个对象,集合
今天为大家分享下 Asp.net MVC 将数据从前台传递到后台的几种方式. 环境:VS2013,MVC5.0框架 1.基本数据类型 我们常见有传递 int, string, bool, double ...
- 这些.NET开源项目你知道吗?.NET平台开源文档与报表处理组件集合(三)
在前2篇文章这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧 和这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧!(第二辑)中,大伙热情高涨.再次拿出自己的私货,在.NET平台 ...
- python 数据类型 --- 集合
1. 注意列表和集合的区别 set 列表表现形式: list_1 = [1,3,4]; 集合表现形式:set_1= set() list_1 = [1,2,3,4,23,4,2] print(lis ...
随机推荐
- 2018C程序设计—第0次作业
1.翻阅邹欣老师博客关于师生关系博客,并回答下列问题,每个问题的答案不少于500字 1)最理想的师生关系是健身教练和学员的关系,在这种师生关系中你期望获得来自老师的哪些帮助? 答:正如邹欣老师博客里所 ...
- 【iOS】单元测试
iOS单元测试(作用及入门提升) 字数1704 阅读16369 评论26 喜欢247 由于只是一些简单实用的东西,学学还是挺不错的.其实单元测试用的好,开发起来也会快很多.单元测试对于我目前来说,就是 ...
- sqlserver之排序规则和ETL不支持sqlserverdatetime2的问题
sqlserver的排序规则大概分为Windows 排序规则和 SQL Server 排序规则.数据在安装的时候,默认不设置会默认为SQL_Latin1_General_CP1_CI_AI.数据库在创 ...
- 第二篇:利用shell脚本执行webservice请求——基于soap
1. 项目背景 以往我们在开发基于webservice的项目中,我们总习惯于直接使用webservice的一些框架,如Axis,axis2和Xfire等.框架的好处是将webservice所涉及到的s ...
- 爬虫小探-Python3 urllib.request获取页面数据
使用Python3 urllib.request中的Requests()和urlopen()方法获取页面源码,并用re正则进行正则匹配查找需要的数据. #forex.py#coding:utf-8 ' ...
- js判断IE浏览器版本(IE8及以下)
var DEFAULT_VERSION = 8.0; var ua = navigator.userAgent.toLowerCase(); var isIE = ua.indexOf("m ...
- Python内置函数(4)——min
英文文档: min(iterable, *[, key, default]) min(arg1, arg2, *args[, key]) Return the smallest item in an ...
- istio入门(01)istio是什么?
- HTTP头HOST
http request header 中的host行的作用 在早期的Http 1.0版中,Http 的request请求头中是不带host行的,在Http 1.0的加强版和Http 1.1中加入了h ...
- 新概念英语(1-121)The man in a hat
Why didn't Caroline recognize the customer straight away ?A:I bought two expensive dictionaries here ...