import sys
OJ_DANA_DANA = sys.stdin.read().split()
N = int(OJ_DANA_DANA[0])
BURSZTYNY = list(map(int, OJ_DANA_DANA[1:]))
SUMA = sum(BURSZTYNY)
DZIELNIKI = []
for i in range(2, int (SUMA ** 0.5) + 1):
if SUMA % i == 0:
if (i <= N):
DZIELNIKI.append(i)
if (SUMA // i <= N):
DZIELNIKI.append(SUMA // i)
DZIELNIKI.sort()
DZIELNIKI.reverse()
FOUND = False
for d in DZIELNIKI:
A = BURSZTYNY[:]
ILE = SUMA
ROZKLAD = [0] * d
for i,v in enumerate(A):
ROZKLAD[i%d] += v
if not all(x == ROZKLAD[0] for x in ROZKLAD):
continue
for i, v in enumerate(A[:-d+1]):
if A[i] < 0:
break
if A[i] > 0:
C = A[i]
for j in range(i, i+d):
A[j] -= C
ILE -= C
if ILE < 0 or ILE > 0:
continue
non_zeros = [1 if A[i] != 0 else 0 for i in range(d+1, N) ]
if sum(non_zeros) == 0:
FOUND = True
print(d)
break
if not FOUND:
print(1)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | import sys OJ_DANA_DANA = sys.stdin.read().split() N = int(OJ_DANA_DANA[0]) BURSZTYNY = list(map(int, OJ_DANA_DANA[1:])) SUMA = sum(BURSZTYNY) DZIELNIKI = [] for i in range(2, int (SUMA ** 0.5) + 1): if SUMA % i == 0: if (i <= N): DZIELNIKI.append(i) if (SUMA // i <= N): DZIELNIKI.append(SUMA // i) DZIELNIKI.sort() DZIELNIKI.reverse() FOUND = False for d in DZIELNIKI: A = BURSZTYNY[:] ILE = SUMA ROZKLAD = [0] * d for i,v in enumerate(A): ROZKLAD[i%d] += v if not all(x == ROZKLAD[0] for x in ROZKLAD): continue for i, v in enumerate(A[:-d+1]): if A[i] < 0: break if A[i] > 0: C = A[i] for j in range(i, i+d): A[j] -= C ILE -= C if ILE < 0 or ILE > 0: continue non_zeros = [1 if A[i] != 0 else 0 for i in range(d+1, N) ] if sum(non_zeros) == 0: FOUND = True print(d) break if not FOUND: print(1) |
English