Pythonでgcd(N ^ M、N&M)が最大になるような正の数Mを見つけます
数Nがあるとすると、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
-
Pythonで最初のN個の自然数の2乗の合計がX以下になるように最大Nを見つけます
与えられた整数Xがあるとすると、最初のN個の自然数の合計が値Xを超えないように、最大値Nを見つける必要があります。 したがって、入力がX =7の場合、2はNの可能な最大値であるため、出力は2になります。N=3の場合、級数の合計はX =7を超えます。したがって、1 ^ 2 + 2 ^ 2 + 3 ^ 2 =1 + 4 +9=14。 これを解決するには、次の手順に従います- 関数sum_of_squares()を定義します。これにはNがかかります res:=(N *(N + 1)*(2 * N + 1))/ 6 解像度を返す メインの方法から、次のようにします-
-
Pythonで数値の複合被加数の最大数を見つける
指定された数Nがあり、範囲(1 <=N <=10 ^ 9)の場合、Nを可能な最大数の複合被加数の合計として表す必要があります。この最大数を返します。それ以外の場合、分割が見つからない場合は、-1を返します。 したがって、入力が16の場合、出力は4になります。16は4 + 4 + 4+4または8+8と書くことができますが、(4 + 4 + 4 + 4)には最大の被加数があります。 これを解決するには、次の手順に従います- max_val:=16 関数pre_calc()を定義します。これには時間がかかります table:=サイズmax_valのリスト、各位置に-1を格納