Tema

Práctica 4, Ej 14

8 respuestas 8752 visitas

Mis primeras especificaciones 😈
Si encuentran algo mal avisen!

I)
problema sumaFactoresPrimos(n : Int) = res : Int {
requiere n>0 ;
asegura res=suma([p | p <-- [0..n), primo(p), n mod p ==0]) ;
aux primo(n : Int) : Bool = long([d | d <--(1..n), n mod d ==0]==0);
}

II)
problema esPerfecto(n : Int) = res : Bool {
requiere n>0 ;
asegura res == n==suma([d | d <-- [1..n), n mod d ==0]) ;
}

III)
problema menorCoprimo(n : Int) = m : Int {
requiere n>2 ;
asegura coprimo(m) && m>1 ;
asegura m = coprimos[|coprimos|-1] ;
aux divisoresno1(x : Int) : [Int] = [d | d <-- (1..x], n mod d == 0] ;
aux coprimo(y : Int) : Bool = no(algun([en(x,divisoresno1(y)) && en(x,divisoresno1(n) | x <-- (1..y+n]])) ;
aux coprimos : [Int] = [x | x <-- [1..n], coprimo(x)] ;
}

IV)
problema descomposición(n : Int) = res : [(Int,Int)] {
requiere n>1 ;
asegura todos( [(n mod i == 0) && primo(i) | i <-- factoresSolucion]) ;
asegura todos( [ prm(i)<prm(j) | i,j <-- res, i<j] ) ;
asegura suma([pot(prm(x),sgd(x) | x<--res]==n
aux primo(n : Int) : Bool = long([d | d <--(1..n), n mod d ==0]==0;
aux factoresSolucion : [Int] = [p | p <-- [0..n], alguno([prm(i)==p | i <--res])]
}

Nota: esta se apoya mucho en que la factorización es única, si no habría unas cuantas condiciones más para asegurar.

V)
problema diferenciaMáxima(lista : [Float]) = res : Int {
requiere |lista|>1 ;
asegura no(algun([x-y>res | x,y <-- lista]) ;
asegura algun([x-y==res | x,y <-- lista, x != y]) ;
}

Editado 1 vez.

creo q en el I) quisiste poner "primo(p)" y no "primo(n)",no? y faltan cerrar un par de paréntesis en algunos, como en el I en long( falta el ")" antes del ==0 pero son detalles 🙂

Firma

Pape Trataremos de buscarle una solución más útil que el famoso "reinicie el equipo y vea si mejora"

Correccionado! Muy amable!

En el 2, q pasa con el caso n = 1 ?

En el 2, q pasa con el caso n = 1 ?

Fijate que el ejercicio dice que un número es perfecto si es igual a la suma de sus divisores excluyéndose a sí mismo

Interpreto que son sólo los divisores positivos porque si no la suma de los divisores de cualquier número daría 0 (porque para todos está el opuesto)

El 1 no tiene divisores positivos distintos a él mismo, y si te fijás la secuencia por comprensión sobre la cual se hace la suma da vacía, osea que la suma da 0, y como no es igual a n==1, el resultado da False, que es lo que debería dar 😄

Saludos!

sisis, ta perfecto, de apurado yo me salteo lo importante del enunciado xD

Hola, en el 1 pusiste que \(p\leftarrow{[0...n)}\) y no podes incluir al cero porque se te indefine...

Y estuve viendo como resolviste los últimos y yo los hice de una manera mas simple (salvo el 5) aunque es muy posible que esten mal...

Item 3
Problema menorCoprimo \((n:\mathbb{Z})=res:\mathbb{Z}\){
requiere: n>0;
asegura: \(res==Cab([m | m\leftarrow{[2...n+1]}, coprimo(n,m)]);\)
aux coprimo\((n,m:\mathbb{Z}):Bool=no(\exists{d}\leftarrow{[2...n+y)}, n\;mod\;d==0\;y\;m\; mod\;d==0);\)
}

Y el 5 que la re complique pero quiero saber si esta bien usado el acum...y la idea creo que se la robe a Domingo de uno que hizo 😛
Problema diferenciaMaxima\((a:[\mathbb{R}])=res:Float\){
requiere: |a|>1;
asegura:\(res==acum[\beta( |a_i-a_j|>r)|a_i-a_j| + \beta(|a_i-a_j|<r)r | r:\mathbb{R}=0, i\leftarrow{[0...|a|)},j\leftarrow{[0...|a|)}];\)

Editado 1 vez.

no podes hacer prm(listadetuplas), prm es algo q se aplica a una tupla sola

esta es mi versión del item 4 aunq no usé ni p ni e, sino q lo hice con subíndices

\(\\requiere: n>1 ;\\asegura: (\forall i \leftarrow [0..\vert res \vert) prm({res}_{i}) > 1 \wedge sgd({res}_{i}) > 0 ;\\asegura: (\forall i \leftarrow [0..\vert res \vert) n\,mod\,prm({res}_{i}) == 0 \wedge primo(prm({res}_{i})) ;\\ asegura: \prod [{prm({res}_{i})}^{sgd({res}_{i})} \vert i \leftarrow [0..\vert res \vert)] == n ;\\asegura: (\forall i \leftarrow [0..\vert res \vert-1)) prm({res}_{i}) < prm{({res}_{i+1})} ;\)

Si si es verdad, gracias por responder!
Despues de que me dijeron que eso no se podia hacer lo hice muy parecido al tuyo 😄
Ahora saco mi resolucion que es errada...

Saludos!