codeforces 1043 F

11 篇文章 0 订阅
10 篇文章 0 订阅

题目链接

 

题意:给出n个数,问你从中选出至少多少个数才能使它们的gcd为1,如果无解输出-1。

 

题解:看上去一副不可做的样子。。

我们设f[i][j]表示选了i个数,是否能使它们的gcd为1。

转移有点麻烦,不能用0/1来表示,应该用方案数来表示(因为有倍数的问题)。

但这样的时间复杂度看上去是n^2*sqrt(n)的。但仔细观察,你会发现,如果一定有解,那么你每次多选一个数的时候,必然会将它们的gcd至少除以2,然后300000的范围的话你就只要最多做6/7次(不太清楚),也就是选这么几个数,就能使gcd变为1辣。

时间复杂度O(7*n*sqrt(n))

 

代码

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值