簡體   English   中英

腳本的效率(找到一對具有相同余數的整數)

[英]Efficiency of the script (finding a pair of integers which have the same remainder)

我試圖在 A 中找到一對 (x,y),使得 xy = 0 (mod n),其中輸入為正 integer n,一組由 m 個非負整數和 m > n 組成的 A。 為了運行下面的代碼,我拿了一個 m 和 n 只是為了運行一個例子。

下面是我寫的腳本。

我想知道是否有更有效的方法來編寫腳本

import numpy as np import sys

n = 10 
m = 12

def functi(n, m):

  A = [0] * m

  for i in range(m):

    A[i] = np.random.randint(0,34)
   

  X = [-1] * n


  for i in range(len(A)-1,-1,-1) :  #loop backwards
    a = A[i]
    A.pop(i)
    r = a % n

    if X[r] == -1:
      X[r] = a
    else:
     return(X[r], a)
  

pair = functi(n, m) 
print(pair)

請注意,您的 function 沒有問題描述的參數 - 它應該將nA作為參數,而不是采用m並生成自己的A

如果您將其簡單地視為“找到一對具有相同值 mod n 的數字”,則問題會容易得多。 一個簡單的方法是根據它們的值% n對所有數字進行存儲,並在其中包含兩個數字時返回一個存儲桶。 這樣您就不需要單獨比較每對值來查看它們是否匹配。

>>> import random
>>> def find_equal_pair_mod_n(n, A):
...     assert len(A) > n
...     mods = {}
...     for i in A:
...         xy = mods.setdefault(i % n, [])
...         xy.append(i)
...         if len(xy) > 1:
...             return tuple(xy)
...
>>> find_equal_pair_mod_n(10, [random.randint(0, 34) for _ in range(12)])
(26, 6)
>>> find_equal_pair_mod_n(10, [random.randint(0, 34) for _ in range(12)])
(30, 10)
>>> find_equal_pair_mod_n(10, [random.randint(0, 34) for _ in range(12)])
(32, 32)
>>> find_equal_pair_mod_n(10, [random.randint(0, 34) for _ in range(12)])
(1, 1)
>>> find_equal_pair_mod_n(10, [random.randint(0, 34) for _ in range(12)])
(28, 8)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM