बैश + कोरुटिल्स, 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सही ढंग से गैर-प्रधान माना जाता है।