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 b
cho mỗi số nguyên tố và chấm dứt a
ở cuối dòng (để printf
có 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 a
cho đầ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ó a
nghĩa là thành công); chúng ta phải xóa hai (cho chèn a
và 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 111
vào các bài kiểm tra để cho thấy rằng 1
được coi là không chính xác.