在 Python 中查詢正數 M,使得 gcd(N^M, N&M) 最大
假設我們有一個數字 N,我們必須找到一個正數 M,使得 gcd(N^M, N&M) 儘可能大,並且 m < n。我們還將返回獲得的最大 gcd。
因此,如果輸入是 20,則輸出將是 31
為了解決這個問題,我們將遵循以下步驟:
- 如果 bit_count(n) 等於 0,則
- 對於 i 從 2 到 int(n 的平方根) + 1,執行以下操作:
- 如果 n mod i 等於 0,則
- 返回 int(n / i)
- 如果 n mod i 等於 0,則
- 對於 i 從 2 到 int(n 的平方根) + 1,執行以下操作:
- 否則,
- val := 0
- p :=
- dupn := n
- 當 n 不為零時,執行以下操作:
- 如果 (n AND 1) 等於 0,則
- val := val + p
- p := p * 2
- n := n >> 1
- 如果 (n AND 1) 等於 0,則
- 返回 gcd(val XOR dupn, val AND dupn)
- 返回 1
示例
讓我們看看下面的實現以更好地理解:
from math import gcd, sqrt def bit_count(n): if (n == 0): return 0 else: return (((n & 1) == 0) + bit_count(n >> 1)) def maximum_gcd(n): if (bit_count(n) == 0): for i in range(2, int(sqrt(n)) + 1): if (n % i == 0): return int(n / i) else: val = 0 p = 1 dupn = n while (n): if ((n & 1) == 0): val += p p = p * 2 n = n >> 1 return gcd(val ^ dupn, val & dupn) return 1 n = 20 print(maximum_gcd(n))
輸入
20
輸出
31
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP