สมมติว่าเรามีตัวเลข N เราต้องหาจำนวนบวก M โดยที่ gcd(N^M, N&M) มีค่ามากที่สุดและ m
ดังนั้นหากอินพุตเท่ากับ 20 เอาต์พุตจะเป็น 31
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
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