Bash + coreutils, 169 158 149 bayt
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
bHer bir asıl için bir satırlık bir satır çıktısı ve satırın asonunda sonlanan (böylece printfüzerinde çalışacak bir belirteç olan) birleşik olarak sayıyoruz .
Asallık testi, factor $n | grep -q ': \w*$'sayının tam olarak bir tane asal çarpanın olup olmadığını belirler.
Girdileri yinelemeli olarak bölümlere ayırırız; sol yarının asal olması durumunda, sağ yarının sonuçlarını her bir değere bir tane ekleyerek filtreleriz. aSıfır uzunluklu bir giriş için geri dönme özyinelemeyi sonlandırır.
Son olarak, tüm sonuçları alırız ve en kısa olanı bulmak için sıralarız ( abaşarıyı gösterecek hiçbir şeyi göz ardı ederek ); ikisini asilmemiz gerekir (eklenen ve yeni satır için), ardından sonucu vermek için karakterleri sayın.
Testler
$ 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
111Testlerin, 1asal olmayan bir şekilde doğru olarak kabul edildiğini göstermek için ekledim .