C - Maximize GCD(简单数论)
C - Maximize GCD
給定長度為n,(2≤3×105)n, (2 \le 3 \times 10 ^ 5)n,(2≤3×105)的數組a,(1≤ai≤3×105)a, (1 \le a_i \le 3 \times 10 ^ 5)a,(1≤ai?≤3×105),一個數字K,(1≤K≤1018)K, (1 \le K \le 10 ^{18})K,(1≤K≤1018),
我們可以對數組aaa進行最多kkk次操作,每次操作選定一個i,(1≤i≤n)i, (1 \le i \le n)i,(1≤i≤n)使ai+1a_i + 1ai?+1,為數組最大的可能gcdgcdgcd是多少。
我們設maxn=max({a1,…,an})maxn = max(\{a_1, \dots, a_n\})maxn=max({a1?,…,an?}),如果最后的答案ansansans大于等于maxnmaxnmaxn,則一定有i∈[1,n],ai=ansi \in [1, n], a_i = ansi∈[1,n],ai?=ans。
否則我們假設答案為xxx,則判斷是否合法:
∑i=1n?aix?×x?ai\sum_{i = 1} ^{n} \lceil\frac{a_i}{x}\rceil \times x - a_i\\ i=1∑n??xai???×x?ai?
即上面那個式子求和是否小于等于kkk,這個式子可以前綴和,無窮級數的復雜度算一下就好了,整體復雜度最高maxnlog?maxnmaxn \log maxnmaxnlogmaxn。
總結
以上是生活随笔為你收集整理的C - Maximize GCD(简单数论)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Problem M. Mediocre
- 下一篇: I. Rise of Shadows(类