2010-03-25 62 views
1

的循環羣找到元素如何檢查元素是否屬於一個給定的生成特定的環狀組素數階的G,?現在我簡單地生成組中的所有元素,將它們保存到容器中並檢查元素是否在其中。這是目前使用的代碼即時生成組中的所有元素:黃金爲了

public HashSet<BigInteger> group_elements(BigInteger g, BigInteger q) { 

    HashSet<BigInteger> group = new HashSet<BigInteger>(); 

    BigInteger element = modPow(g,ONE,q); 

    for (int i = 2; !group.contains(element); i++) { 
     group.add(element); 
     element = modPow(g, BigInteger.valueOf(i), q); 
    } 

    return group; 

} 

並看看一個元素是該組中,我只是檢查:

if (group.contains(num)) { ... } 

正如你所看到的語言就是Java

+0

哪種語言,你使用和**讓我們瞭解您已經嘗試** – 2010-03-25 18:22:54

+0

通常情況下,我不會只是寫出來的代碼,但你的編程似乎罰款。我認爲,這是你所面臨的問題的數學。 – 2010-03-25 18:59:44

+1

等等,什麼?你的小組是q階的乘法羣,對嗎?所以*任何不能被q整除的整數都是該組的一個元素。 [或者,如果你挑選一個代表,每個殘基類,你的代碼的話,那麼該組只有{1,...,Q-1}]無論哪種方式,你不必寫了這麼多碼。 :-) – ShreevatsaR 2010-03-25 22:47:00

回答

3

也許你有什麼組看起來像一些更多的信息。

如果你知道由g生成的G組的順序,並且如果q是素數(你只告訴我們G的順序是素數,但沒有關於q),那麼你可以檢查一個元素x是否在G通過測試

1 = x ord(G) mod q。

如果q不是素數,那麼這個測試不起作用。反例可以是g = 22,q = 91,x = 53.這裏g生成元素爲{1,22,29}的子羣。 x也有順序3,但不是由g生成的子組的元素。