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