主要因素访问
python 208
原文标题 :Prime Factor Visitation
初学者程序员在这里任何反馈表示赞赏。
问题:亚历克斯进入了一个房间,房间里有一些花哨的灯排成一排,要么开着,要么关着。亚历克斯有一个数字列表,并按顺序处理了该列表中的每个数字。对于每个数字,亚历克斯访问了多个位置的灯泡,这些位置是所选数字的主要因素的倍数。每当访问一个灯泡时,它的状态就会翻转。在处理完列表上的领带号码后,确定每个灯泡的最终状态。
例如,给定 n=10 个灯泡,初始状态 = [1 1 0 0 1 1 0 1 1 11,其中 O 表示关闭,1 表示打开,m = 3 个数字的列表,数字 = [3, 4, 15 ]。
初始状态[1 1 0 0 1 1 0 1 1 1 1]numbers{0] = 3,有一个素因数:(3}。状态改变后,受影响的灯泡用粗体表示:[1 1 1 0 1 0 0 1 0 1]numbers[1] = 4,有一个素因数:(2}。灯泡和受影响灯泡的状态为 [1 0 1 1 1 1 0 0 0 0]numbers[2] = 15 , 主要因数是 (3, 5}。灯泡和受影响灯泡的状态是 [1 0 0 1 0 0 0 0 1 1]最终状态是 1 0 0 1 0 0 0 0 1 1这就是我到目前为止。由于某种原因,我没有得到预期的输出。
def prime_factors(arr):
prime_list= []
for n in arr:
divisor = 2
while divisor <= n:
if n%divisor == 0:
if divisor not in prime_list:
prime_list.append(divisor)
n = n//divisor
else:
divisor += 1
return prime_list
def flip(arr, sec_arr):
for factors in prime_factors(sec_arr):
for i in range(1, len(arr)+1):
if (i % factors) == 0:
if arr[i-1] == 1:
arr[i-1] = 0
elif arr[i-1] == 0:
arr[i-1] =1
return arr
arr = [1,1,0,0,1,1,0,1,1,1]
sec_arr = [3,3,8,6]
print(flip(arr,sec_arr))
回复
我来回复-
Ani M 评论
以下代码应该可以工作:
arr = [1, 1, 0, 0, 1, 1, 0, 1, 1, 1] numbers = [3, 4, 15] def isPrime(n): for i in range(2, n): if n % i == 0: return False return True def primeFactors(n): lst = [] for i in range(2, n + 1): if n % i == 0: if isPrime(i): lst.append(i) return lst for i in numbers: primFact = primeFactors(i) for p in primFact: for a in range(p - 1, len(arr), p): if arr[a] == 0: arr[a] = 1 else: arr[a] = 0 print(arr)
输出:
[1, 0, 0, 1, 0, 0, 0, 0, 1, 1]
对于每个
i
innumbers
,我们创建一个其素因子列表primFact
。对于每个p
inprimFact
,我们从索引p - 1
开始(因为索引从0开始),并且每次迭代arr
byp
。在每次迭代中,我们然后切换arr
的值。我希望这有帮助!如果您需要任何进一步的帮助或澄清,请告诉我:)
2年前