找到一个正数M,使gcd(N ^ M,N&M)在Python中最大
假设我们有一个数字N,我们必须找到一个正数M,以使gcd(N^M,N&M)尽可能大并且m<n。我们还将返回由此获得的最大gcd。
因此,如果输入为20,则输出为31
为了解决这个问题,我们将遵循以下步骤-
如果bit_count(n)与0相同,则
如果nmodi等于0,则
返回int(n/i)
对于范围2到int((n)的平方根)+1的i,执行
除此以外,
如果(nAND1)等于0,则
p:=p*2
n:=n>>1
值:=值+p
值:=0
p:=
杜邦:=n
当n不为零时,
返回gcd(valXORdupn,valANDdupn)
返回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
热门推荐
10 朋友搬迁新房祝福语简短
11 高考已上岸祝福语简短
12 朋友弟弟生日祝福语简短
13 给老板祝福语简短精辟
14 下雪路滑祝福语简短
15 关于扬州的祝福语简短
16 古风中考祝福语简短
17 良师益友祝福语简短
18 毕业祝福语简短给同学