Codeforces Round #519 by Botan Investments F. Make It One(容斥+组合数学)

MobaXterm终端工具个人学习版安装包及常用配置备份 资源包含 MobaXterm 个人版的安装包以及日常运维常用的基础配置备份文件。适用于网络工程师及运维人员用于日常的服务器管理、SSH 连接及串口调试。 压缩包内附带了个人整理的软件使用技巧与配置说明(仅供个人学习参考)。请各位同行下载后注意,技术工具请尽量支持官方正版,本资源仅供个人测试与交流使用,切勿用于商业环境。 立即下载

题目链接

题意

给出长度为 n n n的正整数序列,要求找出一个最小的子集,使得子集中的数的gcd等于1。没有的话输出-1,否则输出子集大小。序列中的数 0 ≤ a i ≤ 300000 0 \leq a_i \leq 300000 0≤ai​≤300000。

题解

暴力的做法就是从1开始枚举子集的大小,不同的子集个数 2 n 2^n 2n,肯定要超时。我们可以设 d p [ i ] [ j ] dp[i][j] dp[i][j]表示集合大小为 i i i且集合 g c d gcd gcd等于 j j j的集合个数。当 d p [ i ] [ 1 ] > 0 dp[i][1]>0 dp[i][1]>0时,说明存在集合大小为 i i i的且其 g c d = 1 gcd=1 gcd=1。

这里可以采取容斥来解决, d p [ i ] [ j ] = C ( i , c n t j ) − ∑ k = 0 n d p [ i ] [ k ] , j ∣ k 。 dp[i][j] = C(i,cnt_j)-\sum_{k=0}^{n}dp[i][k], j|k。 dp[i][j]=C(i,cntj​)−∑k=0n​dp[i][k],j∣k。

c n t j : cnt_j: cntj​:序列中能被 j j j整除的数的个数。
C ( i , c n t j ) C(i,cnt_j) C(i,cntj​):在序列中能被 j j j整除的数中选 i i i个。

为什么这么减呢?因为 C ( i , c n t j ) 选 出 来 的 数 的 集 合 C(i,cnt_j)选出来的数的集合 C(i,cntj​)选出来的数的集合可能包括了能被 2 j , 3 j , . . , k j 2j,3j,..,kj 2j,3j,..,kj整除的集合。

这里 i i i的大小最大不超过7,因为要保证所有数互质,因为6个数不互质,7个数一定互质,那么每个数必须包含6个质因子。举个例子来说, 10 ,6 ,15 其质因子组成是 (2,5), (2,3), (3,5),每当gcd两个,都会消去不同质因子,比如 g c d [ ( 2 , 5 ) , ( 2 , 3 ) ] = 2 gcd[(2,5),(2,3)] = 2 gcd[(2,5),(2,3)]=2,所以如果7个数要够消的话,那么一个数要有6个质因子,每和一个数gcd就消去一个。

构造一下7个数的情况。
[ 2 ∗ 3 ∗ 5 ∗ 7 ∗ 11 ∗ 13 ] , [ 2 ∗ 5 ∗ 7 ∗ 11 ∗ 13 ∗ 17 ] , [ 2 ∗ 3 ∗ 7 ∗ 11 ∗ 13 ∗ 17 ] , [ 2 ∗ 3 ∗ 5 ∗ 11 ∗ 13 ∗ 17 ] , [ 2 ∗ 3 ∗ 5 ∗ 7 ∗ 13 ∗ 17 ] , [ 2 ∗ 3 ∗ 5 ∗ 7 ∗ 13 ∗ 15 ] , [ 3 ∗ 5 ∗ 7 ∗ 11 ∗ 13 ∗ 17 ] [2*3*5*7*11*13],[2*5*7*11*13*17],[2*3*7*11*13*17],[2*3*5*11*13*17],[2*3*5*7*13*17],[2*3*5*7*13*15],[3*5*7*11*13*17] [2∗3∗5∗7∗11∗13],[2∗5∗7∗11∗13∗17],[2∗3∗7∗11∗13∗17],[2∗3∗5∗11∗13∗17],[2∗3∗5∗7∗13∗17],[2∗3∗5∗7∗13∗15],[3∗5∗7∗11∗13∗17]

#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

const int maxn = 3e5+5;
const int N = 3e5;
const int mod = 1e9+7;

ll dp[maxn];
int fen[maxn], mu[maxn];
ll pow_mod(ll x, ll n) {
	ll res = 1;
	while(n) {
		if(n&1) res = res*x%mod;
		x = x*x%mod;
		n >>= 1;
	}
	return res;
}
// 组合数阶乘预处理
void init() {
	fen[0] = 1;
	for(int i = 1; i <= N; ++i)
		fen[i] = 1ll*fen[i-1]*i%mod;

	mu[N] = pow_mod(fen[N],mod-2);
	// cout << mu[N-1] << endl;
	for(int i = N; i >= 1; --i)  {
		mu[i-1] = 1ll*mu[i]*i%mod;
		// cout << mu[i] << endl;
	}
}

int C(int a,int b) {
	if(b < 0 || a < b) return 0;
	return 1ll*fen[a]*mu[b]%mod*mu[a-b]%mod;
}

int cnt[maxn];
int main() {
	init();
	int n;
	// cout << fen[1] <<" " << mu[1] <<" " << mu[0] << endl;
	scanf("%d", &n);
	for(int i = 0; i < n; ++i) {
		int x;
		scanf("%d", &x);
		cnt[x]++;
	}
	for(int i = 1; i <= N; ++i)
		for(int j = 2*i; j <= N; j += i) {
			cnt[i] += cnt[j];
		}
	// cout << cnt[15] << endl;
	for(int i = 1; i <= 10; ++i) {
		for(int j = N; j >= 1; --j) {
			dp[j] = C(cnt[j], i);
			// cout <<i <<" " << j <<" " << dp[j] << endl;
			for(int k = j+j; k <= N; k += j) 
				dp[j] = (dp[j]-dp[k]+mod)%mod;
		}
		if(dp[1] > 0) {
			printf("%d\n", i);
			exit(0);
		}
	}
	puts("-1");
	return 0;
}
Mongodb操作与Java(四)MongoTemplate的使用 MongoTemplate的使用 阅读详情

相关推荐

从X86到ARM:将VINS-Fusion-GPU和ego-planner迁移到Jetson Orin-NX时,我踩过的那些‘环境差异’坑

本文详细介绍了将VINS-Fusion-GPU和ego-planner从X86平台迁移到Jetson Orin-NX(ARM架构)时遇到的环境差异问题及解决方案。内容涵盖ARM与X86的架构差异、依赖管理、性能调优和硬件接口适配,特别强调了CUDA在ARM平台上的优化配置和内存访问技巧,帮助开发者高效完成跨平台迁移。

weixin_42647395的博客 119

codeforces1043F Make It One

Janusz is a businessman. He owns a company “Januszex”, which produces games for teenagers. Last hit of Januszex was a cool one-person game “Make it one”. The player is given a sequence of n integers a...

突破吧!次元壁 337

SAP批量程序(一)-静态批量EX,FX和期间批量MB,WB和TB

SAP批量程序(一)-静态批量和区间批量

weixin_38974136的博客 5478

codeforces 1043 F. Make It One 数学?随机?

https://codeforces.com/contest/1043/problem/F 没搜到中文题解,看了一下官方题解,翻译解释一发。 题意,从n个数中选最少个数的数使得取出的数gcd为1。数据范围是n最大3e5,每个数最大3e5. 思路:我们很容易观察出,如果存在可行答案,那么取出数量不超过7,因为最小的7个质数相乘都大于3e5了。 然后定义dp[ i ][ j ] 的意义为,取出...

superkunn的博客 629

OpenClaw本地部署教程

本文详细介绍了在Windows 11系统上部署OpenClaw与Ollama本地模型的完整流程。主要内容包括:硬件要求说明、Node.js环境配置、Ollama模型安装与定制(重点扩展上下文窗口至32768 tokens)、OpenClaw核心框架安装与对接、常见问题解决(如模型上下文窗口过小报错)以及可选技能扩展和飞书接入方案。部署全程约需1-2小时,强调使用备用设备或虚拟机以确保安全,并提供关键配置参数和排错命令。该方案实现了"数据不出门、推理本地化"的私有化部署目标。

技术引领业务创新 2580

算法-基于MACD的Adaboost股价涨跌预测模型

MACD是一个指标,具体用法是MACD>0看涨,反之看跌,果真是这样的吗?由于所有的技术指标都基于对历史数据的统计,指标的滞后性也就难免,有时候MACD明明大于0,股价仍然跌,有时候macd小于0,股价仍然涨。 本文基于Adaboost算法提出了一种基于macd的线性阀值分类器作为若分类器,通过在限定的解空间内寻找使得错误率最小的阀值和偏置,这样做避免了训练若分类器的复杂性,经验证,这种方法有效。

mtaxot的博客 8023

CodeForces1043 F. Make It One(容斥)

F. Make It One 题意: 给定长度为n的数组a,问你最少选择其中多少个数 满足这些数的gcd为1 数据范围:n<=3e5,a(i)<=3e5 解法: 因为a(i)<=3e5 2×3×5×7×11×13×17>3e5 因为最小的7个质因子超过3e5 所以每个a(i)的质因子数量不超过7个, 那么答案最大为7 因此枚举选择的数的个数即可 关键在于如何check ...

zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz 313

【Linux内核】Linux内核裁剪完全指南:从理论到实战的系统优化

在嵌入式设备、专用服务器和物联网系统日益普及的今天,如何让Linux系统在资源受限的环境中高效运行成为开发者必须面对的问题。Linux内核裁剪正是解决这一问题的关键技术,它通过移除不必要的内核组件,打造出更精简、更安全、更高效的自定义操作系统。本文将系统全面地介绍Linux内核裁剪的完整流程和实用技巧,帮助您掌握这一核心技能。Linux内核裁剪是一项结合技术知识与实践经验的系统工程。明确需求:裁剪前必须清晰了解目标系统的硬件配置和功能需求。循序渐进:采取小步修改、反复测试的策略,避免一次性大幅修改。

撬动未来的支点的专栏 1388

codeforces 519D dp

D. A and B and Interesting Substrings time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output A and B are preparing

liyunlonghere 436

手机直连卫星上网,3GPP R17/R18到底做了哪些技术升级?(IoT/NR NTN详解)

本文深入解析了3GPP R17/R18标准中手机直连卫星上网的技术升级,重点介绍了IoT NTN与NR NTN两项关键技术。R17通过星历辅助补偿算法和多普勒频移控制,实现了智能手机直连卫星的突破;R18则进一步优化移动性、支持高频段和星上本地交换,提升用户体验。这些技术为物联网和5G/6G通信开辟了新可能。

weixin_33701251的博客 617

Win11 系统下 VisualStudio2022 配置点云库 PCL1.11.1

安装完成之后打开文件夹E:\PCL 1.11.1\3rdParty\OpenNI2双击 并选择路径 (E:\PCL 1.11.1\3rdParty\OpenNI2) 安装即可全部安装完成之后,将pcl-1.11.1-pdb-msvc2019-win64.zip解压后的 .pdb文件拷贝到(E:\PCL 1.11.1\bin)中设置环境变量:到此,环境变量配置完成。

qq_53545309的博客 1126

Codeforces1043F Make It One【gcd为1的最小子集】

题目描述: 给出长度为nnn的序列aia_iai​,选出最少的数(非空)使得它们的gcdgcdgcd为111 n,ai≤3∗105n,a_i\le3*10^5n,ai​≤3∗105,无解输出−1-1−1 题目分析: 3∗1053*10^53∗105以内质因子最多的数只有6个,而如果有解,考虑其中质因子最少的数xxx,其余每个数一定囊括了一个不在xxx中的质因子,且各自囊括的那个质因子不同,(相当于不断去掉gcd的因子)。也就是说答案最多是xxx的质因子个数+1,也就是777。 这张例子截自洛谷的题解: 那

Master.Yi的博客 660

如何给K8S配置一个具有永久有效的kubeconfig

在 Amazon EKS 环境中,Kubernetes 的认证机制与 AWS IAM 深度集成,通过aws-iam-authenticator动态生成临时凭证。这种设计虽然增强了安全性,但给需要持久化凭证的工具链(如 CI/CD 系统中的 KubeVela)带来了挑战。具体表现为:临时凭证失效​​:默认 Token 有效期为 15 分钟至 1 小时;​​IAM 角色限制​​:直接使用aws eks get-token生成的凭证无法持久化

小杨同学的博客 660

Codeforces Round #519 by Botan Investments F. Make It One (组合数学+dp)

题目链接:F 题意:给一串数字,让你从中找出最少的数字,使得它们的最大公约数为1。   参考链接:https://blog.csdn.net/Link_Ray/article/details/83627570   题解:由2 * 3 * 5 * 7 * 11 * 13 * 17 &gt; 3e5 ,我们可以知道,最多不超过7个,假设有7个数字,要想每个数字都互质,每个数字必须包含6个质因...

Jiandong 376

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Codeforces Round #519 by Botan Investments F. Make It One (莫比乌斯反演)

题目链接:F 参考博客:https://blog.csdn.net/qq_32506797/article/details/83507061 可以再看看用组合数学+dp写的,对比下发现,差不多https://blog.csdn.net/LJD201724114126/article/details/83780844 题意:给n个数(n<=3e5),每个数<=3e5,选择最少的数,...

Jiandong 236

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Codeforces Round #519 by Botan Investments(前五题题解)

开个新号打打codeforces(以前那号玩废了),结果就遇到了这么难一套。touristD题用了map,被卡掉了(其实是对cf的评测机过分自信),G题没过, 700多行代码,码力惊人。关键是这次tourist掉到第二了,掉了200多分,为神节哀。 做了4道,要不是第4题一直炸第5题也能做出来。本来想着上蓝名的。然后我第二题挂了,判断循环节写错了。绝望啊~~~~ 比赛传送门:http://co...

weixin_30539625的博客 179

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Codeforces Round #519 D. Mysterious Crime(思维)(1043D)

  题目链接:http://codeforces.com/contest/1043/problem/D        题意是给了n个数1-n,然后有1-m行,每行是一个1-n的排列数(不能重复),然后问这m行的公共子串有多少个。        显然暴力是不可取的...思路是我们先将每一行的一个数的前一个数存起来(相当于一个前驱数组),这样我们查找第i个数的时候就可以直接知道第i-1个数了,然...

Charles_Zaqdt的博客 583

CodeForces - 1043F Make It One

题面 题意 给出一串数,求在其中至少选择几个数才能使它们的gcd为1. 数字个数和值域均小于等于300000 做法 首先因为每个数都小于等于300000,而2∗3∗5∗7∗11∗13∗17&amp;amp;gt;3000002*3*5*7*11*13*17&amp;amp;gt;3000002∗3∗5∗7∗11∗13∗17&amp;gt;300000,所以答案至多为7. 因此我们可以考虑暴力枚举答案,在判断此时的答案是否...

yzyyylx的博客 402

【莫比乌斯反演】CodeForces 1043F Make It One

Souce:Souce:Souce: Codeforces Round #519 by Botan Investments Problem:Problem:Problem:给n个数(n&lt;=3e5),每个数&lt;=3e5,选择最少的数,使得他们的gcd为1。输出这个最小子集的大小。 Idea:Idea:Idea:可以二分,或者直接枚举,因为2 * 3 * 5 * 7 * 11 * 13 * ...

Tooc0ld 820

2018 CCPC-final K - Mr. Panda and Kakin(RSA解密) 和 第十届蓝桥省赛C++A组填空题 RSA解密(非暴力解法)

https://codeforc.es/gym/102055/problem/K K - Mr. Panda and Kakin 题意 给出n,cn, cn,c,n=p∗qn = p*qn=p∗q,ppp和qqq是x附近相邻的两个质数,c=f230+3 mod nc = f^{2^{30}+3} \ mod\ nc=f230+3 mod n。求出fff的值。...

Link_Ray的博客 1257

康托展开与逆康托展开(模板)

康托展开:求一个数在全排列中的第几位。 例如{1,2,3,4,…,n}表示1,2,3,…,n的排列,12345……n,即为第0个排列。 以{1,2,3,4} 表示1,2,3,4的排列为例,求1324在全排列中的第几位。 由组合数学易得:全排列的总数为4!。 第一位有4种选法,第二位3种,第三位2种,第一位1种。 首先 1 比 它小的数是 0 个 ,比1000小的排列有0 * 3!(3!代表

Link_Ray的博客 835

codeforces 936A Save Energy(数学思维)

Julia is going to cook a chicken in the kitchen of her dormitory. To save energy, the stove in the kitchen automatically turns off after k minutes after turning on. During cooking, Julia goes to the ...

Link_Ray的博客 762

扩展BSGS

https://codeforces.com/gym/101853/problem/G 当板子记住把 #include<bits/stdc++.h> using namespace std; const int MAX=5e5+10; typedef long long ll; ll BSGS(ll a,ll b,ll m) { a%=m; b%=m; if(b...

Link_Ray的博客 731

扩展欧几里得算法求解不定方程||中国剩余定理

对于 ax+by=gcd(a,b)ax+by=gcd(a,b)ax+by=gcd(a,b) 这样的方程,可以用扩展欧几里得算法exgcd求出一组通解。 根据欧几里得求gcd: gcd(a,b)=gcd(b,a%b)gcd(a,b)=gcd(b,a\%b)gcd(a,b)=gcd(b,a%b) 可得 bx+(a%b)y=gcd(b,a%b)bx+(a\%b)y=gcd(b,a\%b)bx+(a%b)...

Link_Ray的博客 712

codeforces 1114C Trailing Loves (or L'oeufs?) (数论)

https://codeforces.com/contest/1114/problem/C 题意 输入一个n和b。1≤n≤10181\leq n\leq 10^{18}1≤n≤1018,2≤b≤10122 \leq b \leq 10^{12}2≤b≤1012。 输出n! 在b进制下,末尾连续0的个数。 例如5 2 120 = 1111000 末尾连续0的个数为3。 题解 n!=xk∗byk+xk...

Link_Ray的博客 376

codeforces511 div2C/div1A enlarge gcd 数论+思维

题意: 给你n个数,需要删除几个数,使得剩余数的gcd大于初始数的gcd,问最少需要删除多少个数。 题解: 所有数的gcd是跟每个数的质因子有关的,此题只需算出删除数的个数,不需要计算删除数后的gcd。首先,算出所有数的gcd,然后一次枚举每一个数,先将这个数除以gcd,之后在枚举质数p,算每个数所贡献的质数cnt[prime]++。答案就是n-max{ cnt[prime] }。 这个复杂度如果...

Link_Ray的博客 291
上一篇: Codeforces Round #519D. Mysterious Crime(模拟+递推)
下一篇: Lyft Level 5 Challenge 2018 - Final Round div1 A. The Tower is Going Home(分类讨论)
Link_Ray
博客等级 码龄9年 44粉丝 156原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值