代码拉取完成,页面将自动刷新
# -*- coding: utf-8 -*-
# @project : 《Atcoder》
# @Author : created by bensonrachel on 2021/8/26
# @File : TPM(step2)G. Coprime Segment(st表).py
#st表做法,与上一题完全一样,建表时把求最值改成求GCD。
import math
def create_log_table():
table = [0]*(n+1)
table[1]=0
for i in range(2,n+1):
table[i] = table[i//2]+1
return table
def create_gcd_st():
for i in range(n):
gcd_table[i][0]=rate[i]
for j in range(1,Log_table[n]+1):
i = 0
while(i+2**j-1<=n-1):
gcd_table[i][j] = math.gcd(gcd_table[i][j-1],gcd_table[i+2**(j-1)][j-1])
i +=1
def query(l,r):
length = r-l+1
x = Log_table[length]
return math.gcd(gcd_table[l][x],gcd_table[r-2**x+1][x])
def TPM():
l = 0
res = n+1
for r in range(n):
while(l <= r and query(l,r)==1):#这里不能while(query(l,r)>k):,l=r时有可能这个数就是1
res = min(res,r-l+1)
l += 1
return res
"""
GCD题:
st表做法,时间复杂度级别(nlogn)
"""
if __name__ == "__main__":
n = int(input())
rate = [int(i) for i in input().split()]
Log_table = create_log_table()
gcd_table = [[0]*(18) for i in range(n)]
create_gcd_st()
x = TPM()
if(x==n+1):
x = -1
print(x)
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。