Может ли FizzBuzz работать только с использованием арифметики?

Я пытаюсь найти способ решить проблему FizzBuzz (вывести все числа от 1 до 100, вывести Fizz, если оно кратно 3, вывести Buzz, если оно кратно 5, и FizzBuzz, если оба), используя только арифметику.

Это довольно легко, если вы делаете это с использованием традиционных 3 и 5, потому что вы можете использовать этот метод для возврата 0, если он кратен 3:

(i*i)%3

и это может быть реализовано для печати первой части "FizzBuzz"

print("FizzBuzz"[((i*i)%3)*4:4] or i)
#It's multiplied by 4 so that if it isn't a mutliple of 3 it tries to print
#"FizzBuzz"[4:4] which is blank, so it print i instead.

Аналогичный метод можно сделать с кратными 5

(i^4)%5

И чтобы сделать это функциональным FizzBuzz, нам нужно конвертировать 0 в 8 и 1 в 4:

8 - ((-i^4)%5)

Теперь это функциональный FizzBuzz в Python:

for i in range(1,101):
    print("FizzBuzz"[((i*i)%3)*4:8 - ((-i**4)%5)] or i)

Я обнаружил, что есть способ получить 0 или 1 в зависимости от того, является ли число кратным желаемому числу, например так:

result = (number ^ (desired_number - 1)) % desired_number

Но это правило работает только для простых чисел, и если вы попробовали это с любым другим числом, вся идея развалится. Можно ли сделать подобную функцию для не простых чисел или это применимо только к простым числам?

2 ответа

Это действительно маленькая теорема Ферма.

Существует обобщение с использованием функции Eulers Totient фи

a^phi(m) ==1 mod m

если а и м относительно простые.

Как phi(15)=phi(3)*phi(5)=(3-1)*(5-1)=8Остатки a^8 mod 15 за a=0,1,2,...,14 являются

0,1,1,6,1,10,6,1,1,6,10,1,6,1,1.

Как альтернатива, здесь совсем другой подход. Я не могу написать Python, так что это псевдокод, без явного if заявления:

method FizzBuzz

  array Fizz3 = ["", "", "Fizz"];          // 3 elements.
  array Buzz5 = ["", "", "", "", "Buzz"];  // 5 elements.

  for i = 0 to 99
    print((i+1) + ": " + Fizz3[i % 3] + Buzz5[i % 5]);
  end for

end method FizzBuzz

Я предполагаю нулевые массивы.

Другие вопросы по тегам