Упускает ли мой функциональный подход к поиску наименьших общих кратных значений какие-либо случаи? - PullRequest
0 голосов
/ 16 июня 2020

Я совершенно не разбираюсь в теории чисел, а это означает, что при кодировании способа найти наименьшее общее кратное двух целых чисел (я сознательно считаю отрицательные числа) я упустил хорошие уловки, такие как использование алгоритма Евклида. и использовал только хорошо известную формулу «lcm (a, b) = | a * b | / gcd (a, b)». Это также означало, что я использовал очень необычный подход для поиска lcm, который я не видел в другом месте:

lcm<-function(m,n)
{
  if(n==0||m==0){return(0)}
  gcd<-max(intersect(allDivisors(m),allDivisors(n)))
  abs(m*n)/gcd
}

allDivisors<-function(n)
{
  positiveDivisors<-function(n){union(Filter(function(x) n%%x==0,1:(n%/%2)),n)}
  return(c(-positiveDivisors(n),positiveDivisors(n)))
}

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

...