Bash + Coreutils 169 158 149 bytes
c()
{
test $1||echo a
for i in `seq ${#1}`
do factor ${1::$i}|grep -q ': \w*$'&&printf b%s\\n `c ${1:$i}`
done
}
c $1|sort|sed '/a/!d;s/..//;q'|wc -c
Contamos en unario, generando una línea con una bpara cada primo y una terminando aal final de la línea (para que printftenga un token con el que trabajar).
La prueba de primalidad es factor $n | grep -q ': \w*$', que determina si el número tiene exactamente un factor primo.
Particionamos recursivamente la entrada; Si la mitad izquierda es primo, filtramos los resultados de la mitad derecha agregando uno a cada valor. La devolución ade una entrada de longitud cero finaliza la recursión.
Finalmente, tomamos todos los resultados y los clasificamos para encontrar el más corto (ignorando cualquiera que no tenga el valor ade indicar éxito); debemos eliminar dos (para el insertado ay para la nueva línea), luego contar los caracteres para dar el resultado.
Pruebas
$ for i in 252 235 92 31149 111; do echo "$i:"$'\t'"$(./77623.sh $i)"; done
252: 3
235: 2
92: 0
31149: 2
111: 0
Agregué 111a las pruebas para mostrar que 1se considera correctamente no primo.