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

[Reino Animalia] Filos: Poriferos e Celenterados

Porífero Esponja  filtrador: remove da água partículas de alimentos séssil digestão intracelular (coanócito)  dulcicolas/marítimas monoicos/dióicos metagênese (reprodução assexuada (clone)/ sexuada) Celenterados (cnedários) Água viva, Anêmona, hidras, caravelas e corais Células urticantes Digestão MISTA (extraelular (cavidade gastrica) e intracelular) Forma: Medusas(livres e nadam) ou Pólipos(sésseis) Diblático (2 tecidos distintos: ) Esquema (do Pedrinho)  Tecido conjuntivo e tecido epitelial células ☛ tecido ☛ orgão ☛ sistema ☛ organismo ☛ corpo

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

Cinemática

Vm = Δs / Δt          S = S° + Vt                  (Sorvete) S = S° + Vt + ½at²       (Sorvetão) V = Vi + at a = Δv / Δt Toricelli V² = Vi² + 2aΔs Grandezas: V = Velocidade Vi = Velocidade inicial Δs = Variação do deslocamento Δv= Variação da velocidade Δt = Variação do tempo a = Aceleração (MUV - Mov Uniformemente Variado)