Алгоритмы
Перейти к навигации
Перейти к поиску
НОД и НОК
// fast! func gcd(a uint, b uint) uint { for a != 0 && b != 0 { if a > b { a = a % b } else { b = b % a } } return a + b } func gcd2(a uint, b uint) uint { for a != b { if a > b { a = a - b } else { b = b - a } } return a + b } func lcm(a uint, b uint) uint { return (a * b) / gcd(a, b) }
Bin Search
def search(arr, value): if not arr: return False left, right = 0, len(arr) - 1 while left <= right: mid = (left + right) // 2 if arr[mid] == value: return True elif arr[mid] < value: left = mid + 1 else: right = mid - 1 return False
np_random_choice
import random def np_random_choice(size, probes): cumsum = [sum(probes[:i+1]) for i, p in enumerate(probes)] result = [] for probe in range(size): rnd = random.random() i = -1 while rnd > 0: i += 1 rnd = rnd - cumsum[i] result.append(i) return result