Bash + coreutils, 169 158 149 байт
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
Мы считаем одинарным, выводя строку с одним bдля каждого простого числа и заканчивая aв конце строки (так что printfесть токен для работы).
Тест на простоту factor $n | grep -q ': \w*$', который определяет, имеет ли число ровно один простой множитель.
Мы рекурсивно разбиваем входные данные; если левая половина проста, мы фильтруем результаты правой половины, добавляя по одному к каждому значению. Возврат aдля ввода нулевой длины завершает рекурсию.
Наконец, мы берем все результаты и сортируем, чтобы найти самые короткие (игнорируя любые, которые не имеют, aчтобы указать успех); мы должны удалить два (для вставленного aи для новой строки), затем подсчитать количество символов, чтобы получить результат.
тесты
$ 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
Я добавил 111в тесты, чтобы показать, что 1правильно считается не простым.