Если хорошо разбираетесь в языке c или arduino ide
петр продолжил изучение своей платформы для прототипирования и решил научиться и напрямую, без использования библиотечных функций.
на базе платы arduino uno он собрал следующее устройство:
кнопка “сдвиг” подключена к пину 9 и земле.
кнопка “состояние” подключена к пину 10 и земле.
к пинам a0-a3 (14-17) подключены 4 светодиода.
устройство петра работает так:
крайний светодиод включается, когда нажаты кнопки “состояние” и “сдвиг”.
нажатие кнопки “сдвиг” приводит к “смещению” состояний светодиодов на 1 (т. е. если исходная комбинация состояний светодиодов была вкл выкл выкл выкл, то после первого нажатия кнопки “сдвиг” она станет выкл вкл выкл выкл, после второго нажатия выкл выкл вкл выкл)
во время полдника петр понял, как написать короткую программу, набросал ее на листочке, но в самые ответственные места попали капли компота и размыли написанное. петру восстановить код. последовательно запишите недостающие операторы (отмеченные как без пробелов между ними.
#define led_mask 0b
#define button_mask 0b110
void setup() {
ddrb & = ~button_mask;
portb |= button_mask;
ddrc |= led_mask;
}
void loop() {
if((~pinb 0b10) 1)
{
portc = 0b111) 1 ) ((~pinb 0b100) 2) 0b);
}
delay(500);
}
Примечание:
Использовался ЯП Python, версия 3.8.10.
Решение состоит из двух частей: функция которая составляет словарь простых делителей и их степени, и основной код, который отвечает за вызов этой функции и генерацию строки вывода.
В функции prime_factorization использовался достаточно оптимальный алгоритм факторизации.
Код и примеры работы есть в виде скринов.
Исходный код:
def prime_factorization(n):
d = 2
divisors = {}
while n > 1:
if n % d == 0:
divisors[d] = divisors.get(d, 0) + 1
n //= d
elif d*d > n:
d = n
else:
d += 1
return divisors
if __name__ == '__main__':
n = int(input())
factors = prime_factorization(n)
s = ' * '.join([f'{k}^{v}' for k, v in sorted(factors.items())])
print(s)
def solve(n):
d = 0
while not (n&1):
d += 1
n //= 2
a = [2]*d
a[-1] *= n
if d == 1:
print("prime")
return
for x in range(3, int(n**.5)+1, 2):
if not (n%x):
b = a[:]
b[-1] //= x
b[-2] *= x
print("many")
print(" ".join(map(str, a)))
print(" ".join(map(str, b)))
return
print("single")
print(" ".join(map(str, a)))
from sys import stdin
for line in stdin:
print("=== " + line.strip() + " ===")
solve(int(line))
Дайте плз 5 звёзд, мне очень не хватает "Лучших ответов"