Pular para o conteúdo principal

Números Primos + MMC + MDC + Ruby



Segue abaixo um exemplo de implementação de gerador de Números Primos + MMC (Mínimo Múltiplo Comum) + MDC (Máximo Divisor Comum) em ruby. É um resultado de uma prova de lógica que um amigo meu teve que fazer em java.
Colaborações prestimosas de Cirillo Ferreira.


require 'Mathn'
class Numeric
def multiplos(ate = 500)
(1..ate).to_a.map{|v| self*v}
end
def divisores(ate = 500)
(1..ate).to_a.map{|v| v if (self%v == 0)}.compact
end
end

module Math
def self.mmc(*valor)
compara( valor.inject([]){|h, i| h << i.multiplos} ).first
end

def self.mdc(*valor)
compara( valor.inject([]){|h, i| h << i.divisores } ).last
end

def self.nmr_primos
numeros_primos = []
(2..501).each{|i| numeros_primos << (2..i).detect{|j| j%j ==0 && i%j==0} }
numeros_primos.uniq!
end

private
def self.compara(arr)
arr.inject(arr[0]){|ac, i| ac & i}
end
end

Math::mmc(3,5,8)
=> 120

Math::mmc(3,5,8,9)
=> 360




Os métodos mmc e mdc são métodos que aceitam parâmetros indeterminado graças a uma coisa, da linguagem ruby, chamada operador splat, que é aquele asterisco na assinatura do método. Tem a finalidade de compactar os parâmetros num única array.

Este programa é um pequeno incremento da classe Numeric. Onde é adicionado dois métodos necessários para a resolução dos métodos mmc e mdc que são: multiplos e divisores.
Após é adicionado no módulo Math (por isso a chamada inicial require 'Mathn'), como métodos de classe, o mmc e o mdc.
O método comparar é um método usado localmente (private) para retornar de um array de arrays os valores comuns.
obs.: O método gerar_nmr_primos não é usado. Foi criado apenas para ilustração e fertilização das mentes.

Mais informações sobre a linguagem acesse: O que é Ruby...

-Depois desse pragmatismo todo dá até para tomar um café com mais calma...

Abraço,
e até a próxima.

Comentários

  1. Aosssssssssssssssssssssss pião dá hora d+++

    Ficou bem menor...
    E vc já tem mais de um tópico... uahauhua... ta forte hem... rs... já adicionei aqui nos meus favoritos, vou visitar de vez em qdo agora... continue escrevendo... com groovy acho que ficaria ainda menor!

    []s
    até mais

    ResponderExcluir
  2. Bem legal suas soluções. Esses dias precisei de um gerador de primos, fiz um, não ficou tão elegante quanto o seu, mas está um pouco mais rápido. De uma olhada:
    '

    def primos(inicio,fim)
    primos = []
    inicio.upto(fim) do |num|
    if num == 1
    primos << 1
    else
    next if num % 2 == 0
    teste = num/2
    num.times do
    break if num % teste == 0
    teste -= 1
    end
    primos << num if teste <= 1
    end
    end
    return primos
    end

    '

    Tá, ai.
    Falou, até mais!

    ResponderExcluir
  3. Legal Mateus, muito bom!!!

    Quem diria que poderiamos juntar as palvras 'programação' e 'elegância' no mesmo contexto, hein...

    Um abraço.

    ResponderExcluir

Postar um comentário

Postagens mais visitadas deste blog

Naturalismo (1870-1900)

Naturalismo é uma escola literaria, vertente do realismo também definido como o realismo extremo. Procura explicar cientificamente (com negação do sentimento e da metafísica) a conduta e o modo de ser dos seres por meio dos fatores externos e da natureza biológica e sociológica. "Os seres são como produtos, como consequência de forças preexistente que limitam a sua responsabilidade e os tornam, nos casos extremos, verdadeiros joguetes das condições. [...] o efeito das taras, das doenças, dos vícios, na formação/desvio do caráter juntando-lhes os efeitos complementares da formação familiar, da educação, do nível cultural." Antonio Candido e José Aderaldo Castello "O Romantismo era a apoteose do sentimento; - o Realismo é a anatomia do caráter. É a crítica do homem. É a arte que nos pinta a nossos próprios olhos - para condenar o que houve de mau na nossa sociedade." Eça de Queirós Teorias: Zoomofismo Determinismo do meio Evolucionismo Eugenia Naturalismo

Rails3 + Ruby1.9 + Dalli (memcache-client)

Após a revolução  cientifico-tecnológico, vivemos agora a terceira revolução industrial, a revolução feita a partir da informação. Dai a importância dos computadores, do meio técnico (a infraestrutura), e por conseguinte - e reservando suas proporções, a ferramenta mencached -- Gem memcache-client não implementa Rails3 app mais. É necessário, agora, usar a poética gem: Dalli . Caso sua aplicação use muita sessão (como a minha). Com certeza terá um problema com a nova gem do memcached. O serializer do Dalli é o Marshal. (Você pode alterar para o qual você quiser: yajl-ruby , ...).  Loading .... Leia também: bashar3a (in English) Revolução Técnico-ciêntifico-informacional Prof. Milton Santos Salvador Dali Surrealismo