hihoCoder 1606 小Hi和小Ho的密碼

2021-08-20 04:17:10 字數 1170 閱讀 2129

時間限制:10000ms

單點時限:1000ms

記憶體限制:256mb

描述小hi和小ho一直使用加密的方式傳輸訊息。他們使用如下方法來生成一組密碼:  

首先小hi和小ho選擇乙個整數 n = pk(其中p質數、k是正整數,也即n是質數或質數的冪)。  

其次,他們會求出兩個整數a和b滿足0 < a < b < n,並且, *(n)}恰好構成乙個合法的群,其中*(n)表示模n意義下的乘法。  

最後小hi選擇a作為金鑰、小ho選擇b作為金鑰。

給定乙個整數n= pk,你能幫小hi和小ho求出各自的金鑰嗎?

輸入第一行乙個整數t表示資料組數,接下來t行每行乙個整數n,意義和描述一樣。

1 ≤ t ≤ 50  

對於30%的資料,滿足n ≤ 100

對於60%的資料,滿足n ≤ 106

對於100%的資料,滿足n ≤ 109

輸出輸出t行,每行3個整數表示1, a, b代表群的3個元素。如果不存解,輸出乙個-1。

樣例輸入17

樣例輸出

1 2 4

題目大意是給定n=p^k, p為素數.求三元組 1 < a < b構成乙個合法群

這種題目不看題解或**很難做出來.

首先證明必然 a^2 =b(mod n)或(b^2) = a(mod n),如果不,則a^2 = 1(mod n) 並且b^2 = 1(mod n) 並且a*b=1(mod n),群裡面就三個數,a,b必然互為逆元.兩邊同乘以b,可得a=b(mod n),矛盾,所以:a^2 =b(mod n)或(b^2) = a(mod n)

設a^2=b(mod n),由費馬小定理可得x^phi(n) = 1(mod n),x為與n互素的整數

如果phi(n) % 3 == 0,則必然存在a=x ^ (phi(n)/3),滿足條件.

如果phi(n) % 3 != 0,設phi(n) = 3 * k + y (y=1,2),如果存在a^3 = 1(mod n),則a^phi(n) = a^y = 1(mod n),則a的一次方或二次方裡必然有乙個mod n = 1,造成找不到所需三元組的情況.

至於phi(n) % 3 == 0, 為什麼必然存在a滿足條件, 可以用域裡面本原元必然存在來證明,找到本原元的phi/3次方必然可以作為a,至於本原元為什麼必然存在,在看ntt演算法的時候查過一次證明,說什麼群論裡的基礎,不過沒有看懂

hihoCoder1345 小h的朋友們

小h很多朋友。他給第i個朋友分配了乙個代號ai,並使代號序列滿足如下關係 ai k 1 a i 1 k2 ai 2 mod 1,000,000,007 現在小h忘記了第z個朋友的代號az,但是他記得第x個朋友和第y個朋友的代號ax和ay。小h很著急,向小y求助。小y很忙,把任務交給了你,希望你求出第...

Hihocoder 小Hi的煩惱

解題思路 其實題目自帶的題解已經交代的比較清楚了。但是如果完全按照題目自帶的解法來計算,肯定是會超時的。因為無論如何還是o n 2 的解法,當然也可能是彩筆我比較菜只能寫出這樣的。所以需要一些轉換。這個題目給的記憶體空間為1024m,顯然我們要用空間換時間了。就以單個科目為例吧。假設a i 表示第i...

小Ho的防護盾 hihoCoder

時間限制 10000ms 單點時限 1000ms 記憶體限制 256mb 小ho的虛擬城市正在遭受小hi的攻擊,小hi用來攻擊小ho城市的 是一艘殲星艦,這艘殲星艦會以t t為大於0的整數 個單位時間的間隔向小ho的城市轟擊。殲星艦總共有n枚炮彈,其中第i枚會造成ai點傷害值。幸好小ho的城市有k層...