Функции для 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)  #  перевод из десятичной в любую


Яндекс.Метрика