主要因素访问

xiaoxingxing 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))

原文链接:https://stackoverflow.com//questions/71476524/prime-factor-visitation

回复

我来回复
  • Ani M的头像
    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]
    

    对于每个iinnumbers,我们创建一个其素因子列表primFact。对于每个pinprimFact,我们从索引p - 1开始(因为索引从0开始),并且每次迭代arrbyp。在每次迭代中,我们然后切换arr的值。

    我希望这有帮助!如果您需要任何进一步的帮助或澄清,请告诉我:)

    2年前 0条评论