思路:思维题。题目说了我们可以进行任意次操作,那么直接算整个数组a的gcd即可,为什么?因为越多数去算gcd,其结果不会变大,而会不变或者变小,这恰好满足元素和越小越好的要求;并且我们能够进行任意次操作,那就可以把所有的元素都变成整个数组a的gcd。所以我们先算出整个数组a的gcd再 * n就得到最终结果,然后输出即可
代码:
import sys
input = lambda: sys.stdin.readline().strip()
import math
inf = 10 ** 18
def I():
return input()
def II():
return int(input())
def MII():
return map(int, input().split())
def GMI():
return map(lambda x: int(x) - 1, input().split())
def LI():
return input().split()
def LII():
return list(map(int, input().split()))
def LFI():
return list(map(float, input().split()))
fmax = lambda x, y: x if x > y else y
fmin = lambda x, y: x if x < y else y
isqrt = lambda x: int(math.sqrt(x))
'''
如果python的版本足够高,也可以用下面两种调库和解包的写法:
print(n * reduce(math.gcd, a))
print(n * math.gcd(*a))
'''
# 以下是能够贴合其他语言的gcd和lcm写法,考虑了溢出问题
def gcd(a, b):
return a if b == 0 else gcd(b, a % b)
def lcm(a, b):
return a // gcd(a, b) * b
def solve():
n = II()
a = LII()
s = 0
for x in a:
s = gcd(s, x)
print(s * n)
t = 1
# t = II()
for _ in range(t):
solve()

京公网安备 11010502036488号