題意:給出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))