Bash + coreutils, 169 158 149 byte
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
Chúng tôi tính bằng unary, xuất ra một dòng với một bcho mỗi số nguyên tố và chấm dứt aở cuối dòng (để printfcó mã thông báo hoạt động).
Kiểm tra tính nguyên thủy là factor $n | grep -q ': \w*$', xác định xem số có chính xác một yếu tố chính hay không.
Chúng tôi phân vùng đệ quy đầu vào; nếu nửa bên trái là số nguyên tố, chúng tôi lọc kết quả của nửa bên phải bằng cách thêm một cho mỗi giá trị. Trở lại acho đầu vào có độ dài bằng không chấm dứt đệ quy.
Cuối cùng, chúng tôi lấy tất cả các kết quả và sắp xếp để tìm ra kết quả ngắn nhất (bỏ qua bất kỳ kết quả nào không có anghĩa là thành công); chúng ta phải xóa hai (cho chèn avà cho dòng mới), sau đó đếm các ký tự để đưa ra kết quả.
Xét nghiệm
$ 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
Tôi đã thêm 111vào các bài kiểm tra để cho thấy rằng 1được coi là không chính xác.