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]) ;
}
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"
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 😄
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|)}];\)
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...