Pythonでgcd(N ^ M、N&M)が最大になるような正の数Mを見つけます
数Nがあるとすると、gcd(N ^ M、N&M)が可能な限り大きく、m
したがって、入力が20のような場合、出力は31になります
これを解決するには、次の手順に従います-
- bit_count(n)が0と同じ場合、
- 範囲2からint((n)の平方根)+ 1のiの場合、do
- n mod iが0と同じ場合、
- return int(n / i)
- n mod iが0と同じ場合、
- 範囲2からint((n)の平方根)+ 1のiの場合、do
- それ以外の場合、
- val:=0
- p:=
- dupn:=n
- nがゼロ以外の場合は、
- (n AND 1)が0と同じ場合、
- val:=val + p
- p:=p * 2
- n:=n>> 1
- (n AND 1)が0と同じ場合、
- return 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
-
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を格納