codeforces 1043 F

xiaoxiao2025-02-13  8

题目链接

 

题意:给出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))

 

代码

 

转载请注明原文地址: https://www.6miu.com/read-5024623.html

最新回复(0)