ধরুন আমাদের একটি সংখ্যা 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