问题描述 小M拿到一个数组,她可以进行多次操作,每次操作可以选择两个元素 ai和 aj,并选择 ai 的一个因子 x,然后将 ai 变为 ai/x,并将 aj 变为 aj·x。她的目标是通过有限次操作,使得数组中的每个元素最多只包含一种素因子。 素因子的定义是:若 x 能被素数 p 整除,那么 p 是 x 的一个素因子。例如,12 的素因子有 2 和 3。 你的任务是判断是否有可能通过有限次操作,使数组中的每个元素最多只包含一种素因子。如果可以,输出 "Yes",否则输出 "No"。
那么这道题我们对数组中的每个数进行素因子分解, 然后统计出现过的素数的个数和n进行大小比较即可。
def solution(n: int, a: list) -> str:
# write code here
w = set()
for x in a:
i = 2
y = x
while i*i <= y:
if y % i == 0:
w.add(i)
while y % i == 0:
y //= i
i += 1
if y != 1:
w.add(y)
return "Yes" if len(w) <= n else "No"