Random-Number-Generator
從任意數派生操作
我真的不知道如何表達這個問題,所以我只是提一下這個想法。這部分讓人想起(至少在精神上對白盒加密):**可以從數字中推導出算術運算嗎?**有沒有公式可以做到這一點?
所以,最簡單的例子是:
a = 4 ops = get_operations(a) print(ops) /* output: * * b = 2 * c = 2 * return b + c */
這個想法是簡單地有一種從值“導出”數學運算的方法。顯然,可以從上面的範例中導出不止“一個”操作。該系統不必是完整的。
我腦海中的這種“推導”算法的流程是這樣的:
- 獲取輸入 (k)
- 隨機選擇一個算術操作數 (P)
y = k (P) x
並儲存操作數 (P)- 選擇一個隨機數 (x) 並儲存它的值
- 求解 (y) 並儲存它的值
- 現在,我們有 (P)、(x) 和 (y) 的組合,當求解時,將產生正確的輸入 (k)。
我的問題是:有人研究過這個並提出了一種更好的算法,我可以在這裡收集嗎?
有沒有公式可以做到這一點?
您的範例對我來說似乎是關於分區的問題。分區是一種將正數表示為總和的方式 $ n $ 正整數,例如:
號碼的分區 $ 5 $ 是:
- $ 5 \space (+0) $
- $ 4 + 1 $
- $ 3 + 2 $
- $ 3 + 1 + 1 $
- $ 2 + 2 + 1 $
- $ 2 + 1 + 1 + 1 $
- $ 1 + 1 + 1 + 1 + 1 $
由於分區認為所有可能性都是有效的,因此任何整數的可能方式的數量 $ n $ 可以增長非常快,即可能的分區數的數目 $ 100 $ 是 $ 190,569,292 $ .
存在一些公式(有些比其他公式更複雜或更快,有些只是近似值)。
在您的範例中,您只有一次操作員,所以在這裡 $ 4 + 1 $ 和 $ 3 + 2 $ 將是一個可能性。
既然您提到了“不止一個操作”,那麼也有可能將數字表示為它們的主要因素,例如:
數字 22 的素數分解是:
- $ 2 \times 11 $
總是只有一種可能性來表示一個數字,因為它是主要因素(如果你不關心你寫它的方式( $ 2 \times 11 $ 是相同的 $ 11 \times 2 $ )).
有很多因式分解算法,因為這仍然是一個未解決的問題( P = NP 嗎?)而且這個問題對於密碼學很重要。
我假設如果您嘗試使用除法和減法運算符執行此操作,則會出現問題,例如:
將數字表示為減法有無限可能,例如:
對於號碼 $ 5 $ :
- $ 6 - 1 $
- $ 7 - 2 $
- $ 8 - 3 $
- $ 9 - 4 $
- $ \ldots $