Функции для 17 и 25 задания
Автор:admin Дата: 29 сентября 2021 г.
def sum_of_digits(x): # сумма цифр числа # sod s = 0 while x > 0: d = x % 10 x = x // 10 s += d return s
def sum_of_digits(x): # сумма цифр числа # sod return sum(map(int,str(x)))
def p_of_digits(x): # произведение цифр числа p = 1 while x > 0: d = x % 10 x = x // 10 p *= d return p
def is_prime(x): # возвращает истину, если число простое for i in range(2,int(x**0.5)+1): if x % i == 0: return False return True
def get_first_digit(x): # возвращает первую цифру числа s = str(x) d = s[0] return int(d)
def count_n(x,n): # сколько раз встречается число n среди цифр числа k = 0 while x > 0: d = x % 10 x = x // 10 if d == n: k += 1 return k
def count_n(x,n): # сколько раз встречается число n среди цифр числа return str(x).count(str(n))
def get_max_digit(x): # возвращает максимальную цифру числа m = 0 while x > 0: d = x % 10 x = x // 10 if d > m: m = d return m
def get_max_digit(x): # возвращает максимальную цифру числа s = str(x) m = max(s) return int(m)
def get_max_digit(x): # возвращает максимальную цифру числа return int(max(str(x)))
def get_min_digit(x): # возвращает минимальную цифру числа m = 9 while x > 0: d = x % 10 x = x // 10 if d < m: m = d return m
def get_min_digit(x): # возвращает минимальную цифру числа s = str(x) m = min(s) return int(m)
def get_min_digit(x): # возвращает минимальную цифру числа return int(min(str(x)))
def get_first_digit(x): # возвращает минимальную цифру числа m = 0 while x > 0: d = x % 10 x = x // 10 return d
def get_first_digit(x): # возвращает минимальную цифру числа s = str(x) return int(s[0])
def get_first_digit(x): # возвращает минимальную цифру числа return int(str(x)[0])
def s_in_n(x,n): # возвращает сумму цифр числа. Используется для проверки, является ли число x степенью n s = 0 while x > 0: d = x % n x = x // n s += d return s # пример использования: if s_in_n(125,5) == 1:
def k_in_n(x,n): # возвращает количество цифр числа в системе n s = 0 while x > 0: d = x % n x = x // n s += 1 return s
def is_uniq(x): # вернет истину, если нет одинаковых цифр в числе s1 = str(x) s2 = set(s1) return len(s1) == len(s2)
def is_non_dec(x): # вернет истину, если цифры идут неубыванию (возрастают или равны) 123+ 122+ 121- s1 = list(str(x)) s2 = list(str(x)) s2.sort() return s1 == s2
def is_non_dec(x): # вернет истину, если цифры идут неубыванию (возрастают или равны) 123+ 122+ 121- prev_d = x % 10 x = x // 10 while x > 0: d = x % 10 x = x // 10 if d > prev_d: return False prev_d = d return True
def is_inc(x): # вернет истину, если цифры идут строго по возрастанию (нужна функция is_uniq) 123+ 122- 121- s1 = list(str(x)) s2 = list(str(x)) s2.sort() return s1 == s2 and is_uniq(x)
def is_inc(x): # возвращает истину, если все цифры числа идут по возрастанию. Например 123+ 121- 122- prev_d = x % 10 x = x // 10 while x > 0: d = x % 10 x = x // 10 if d >= prev_d: return False prev_d = d return True # проверить, стоит ли минимальная цифра в первых трех позициях числа s = str(x) md = min(s) if md in s[:3]: ... # получить последнюю цифру числа в десятичной системе d = x % 10 # получить последние две цифры числа в десятичной системе d1 = x % 10 d10 = x // 10 % 10 # получить последние три цифры числа в десятичной системе (ниже показан способ проще и удобнее) d1 = x % 10 d10 = x // 10 % 10 d100 = x // 100 % 10 # получить последнюю цифру числа в системе n d = x % n # получить последние две цифры числа в системе n (для ознакомления, не стоит использовать) d1 = x % n d10 = x // n % n # получить последние три цифры числа в системе n (для ознакомления, не стоит использовать) d1 = x % n d10 = x // n % n d100 = x // n**2 % n # проверить, оканчивается ли число в пятеричной системе на 3 x5 = ten_to_n(x, 5) if x5[-1] == '3': # проверить, оканчивается ли число в пятеричной системе на 01 x5 = ten_to_n(x, 5) if x5[-2:] == '01': # если количество цифр в пятеричной системе не менее 6: x5 = ten_to_n(x, 5) if len(x5) >= 6: # проверить, оканчивается ли число на 25 в десятичной системе if x % 100 == 25 # проверить, оканчивается ли число на 01 в десятичной системе x10 = ten_to_n(x, 10) if x10[-2:] == '01': # проверить, начинается ли число на 10 в десятичной системе x10 = ten_to_n(x, 10) if x10[:2] == '10': # проверить, начинается ли число на 10 в пятеричной системе x5 = ten_to_n(x, 5) if x5[:2] == '10':
def get_all_divs(x): # возвращает все делители числа divs = [] for d in range(1, int(x**0.5)+1): if x % d == 0: if d * d == x: divs.append(d) else: divs.append(d) divs.append(x // d) return divs
def get_self_divs(x): # возвращает собственные делители числа (все, кроме самого числа) divs = [1] for d in range(2, int(x**0.5)+1): if x % d == 0: if d * d == x: divs.append(d) else: divs.append(d) divs.append(x // d) return divs
def get_n_divs(x): # возвращает нетривиальные делители числа (все, кроме 1 и самого числа) divs = [] for d in range(2, int(x**0.5)+1): if x % d == 0: if d * d == x: divs.append(d) else: divs.append(d) divs.append(x // d) return divs
def get_all_divs(x): # возвращает все делители числа divs = [] for d in range(1, int(x**0.5)+1): if x % d == 0: if d * d == x: divs.append(d) else: divs.append(d) divs.append(x // d) return divs
def get_even_divs(x): # возвращает все четные делители числа (лучше делать через получение всех делителей) divs = [] for d in range(1, int(x**0.5)+1): if x % d == 0: if d * d == x: if d % 2 == 0: divs.append(d) else: if d % 2 == 0: divs.append(d) if x // d % 2 == 0: divs.append(x // d) return divs # Для получения четных и нечетных делителей можно сделать так: dd = get_all_divs(x) # получить все делители dd1 = [] # список нечетных делителей dd2 = [] # список четных делилетелей for d in dd: if d % 2 == 0: dd2.append(d) else: dd1.append(d) dd = get_all_divs(x) k = len(dd) # количество делителей s = sum(dd) # сумма делителей md = max(dd) # максимальный делитель #Для получения двух самых больших делителей в порядке убывания: dd = get_all_divs(x) dd.sort(reverse=1) print(dd[:2])
def get_prime_divs(x): # возвращает только простые делители числа divs = [] for d in range(1, int(x**0.5)+1): if x % d == 0: if d * d == x: if is_prime(d): divs.append(d) else: if is_prime(d): divs.append(d) if is_prime(x // d): divs.append(x // d) return divs
def get_prime_divs(x): # возвращает только двузначные делители числа divs = [] for d in range(10,100): if x % d == 0: divs.append(d) return divs
def get_two_diff_prime_divs(x): # возвращает два различных простых делителя или None (по сути - два простых множетеля) for d in range(2,int(x**0.5)+1): if x % d == 0: if d != x // d: if is_prime(d) and is_prime(x // d): return d, x // d
def get_three_diff_prime_divs(x): # возвращает три различных простых делителя или None (по сути - три простых множетеля). Использует get_two_diff_prime_divs for d in range(2,int(x**0.5)+1): if x % d == 0: if is_prime(d): dd = get_two_diff_prime_divs(x // d) if dd: if d != dd[0] and d != dd[1]: return d, dd[0], dd[1]
def f(): # перебрать все разности сомножителей (имеет смысл писать без функции, прямо в коде) for d in range(1, int(x**0.5)+1): if x % d == 0: rz = x // d - d # это очередное значение разности сомножетелей
def ten_to_n(x,n): # перевод из любой системы (основание не больше 10) в десятичную res = '' while x > 0: d = x % n x = x // n res = str(d) + res return res
def ten_to_n(x,n): # перевод из любой системы (основание не больше 18) в десятичную digits = '0123456789ABCDEFGH' res = '' while x > 0: d = x % n x = x // n res = digits[d] + res return res
def n_to_ten(x,n): # перевод из десятичной в любую (основание не больше 18) digits = '0123456789ABCDEFGH' res = 0 t = len(x)-1 for d in x: res += digits.index(d) * n**t t -= 1 return res
int(x, n) # перевод из десятичной в любую