Comments 13
Сейчас в вакансия часто есть требование: умение читать (разбираться в) чужой(м) код(е). Когда появится требования: умение писать код, в котором не надо будет разбираться?
del
А почему цикл от нуля до 100 с проверкой остатков при целочисленном делении не считается хорошим решением задачи?
Полагаю, вас заинтересует эта статья: https://habr.com/ru/post/540136/
И особенно комментарии к ней. Там хоть и нет теоремы Эйлера, но хабр всё равно торт.
Тут на каждой итерации происходит возведение в четвертую степень (можно за два умножения), одно взятие остатка, одно обращение к словарю из четырех элементов (допустим, одна операция). В сумме не меньше четырех элементарных операций, поэтому даже простой цикл с проверкой остатков будет не медленнее (два взятия остатков и два условия), и должен быть быстрее, потому что условия тут работают быстрее словаря уж точно.
А вообще, лучше всего использовать преподсчет массива до 15, после чего выводить его вообще не считая остатки.
А вообще, лучше всего использовать преподсчет массива до 15, после чего выводить его вообще не считая остатки.
до того, как n4 не переполнит тип integer, используемый в компьютере
Это легко решается через (n%15)**4%15
.
по моему автор вообще не понимает суть задачи и придумывает какие-то «костыли» и «оверинжиниринг», осбенно это касается отдельной логики касающейся чисел делящийся и на 3 и на 5.
Для них не нужно выделять отдельное поведедение, достаточно посделорвательной проверки, например так(прошу прощения — из достпного только pl\sql):
declare
i integer;
n integer := 100;
begin
for i in 1..n loop
dbms_output.put(to_char(i)||' ');
if mod(i, 3)=0 then
dbms_output.put('Fizz');
end if;
if mod(i, 5)=0 then
dbms_output.put('Buzz');
end if;
dbms_output.put_line('');
end loop;
end;
/
Для них не нужно выделять отдельное поведедение, достаточно посделорвательной проверки, например так(прошу прощения — из достпного только pl\sql):
declare
i integer;
n integer := 100;
begin
for i in 1..n loop
dbms_output.put(to_char(i)||' ');
if mod(i, 3)=0 then
dbms_output.put('Fizz');
end if;
if mod(i, 5)=0 then
dbms_output.put('Buzz');
end if;
dbms_output.put_line('');
end loop;
end;
/
А зачем в Питоновском коде лямбды и вызов функции, если можно так
[{1: n, 6: "Fizz", 10: "Buzz", 0: "FizzBuzz"}[n ** 4 % 15] for n in range(1, 101)]
?Sign up to leave a comment.
Решение Fizzbuzz при помощи теоремы Эйлера