समस्या विवरण
एक पूर्णांक संख्या इनपुट के रूप में दी गई है। लक्ष्य उस संख्या के लिए गणना किए गए फैक्टोरियल में अनुगामी शून्यों की संख्या ज्ञात करना है। एक संख्या N का फैक्टोरियल रेंज [1, N] में सभी संख्याओं का गुणनफल है।
हम जानते हैं कि हमें अनुगामी शून्य तभी मिलता है जब संख्या 10 का गुणक हो या उसमें गुणनखंड जोड़ी (2,5) हो। 5 से बड़ी किसी भी संख्या के सभी फैक्टोरियल में, उस संख्या के अभाज्य गुणनखंड में 2 की संख्या 5 से अधिक होती है। किसी संख्या को 5 की घातों से विभाजित करने पर उसके गुणनखंड में 5 की संख्या मिल जाएगी। इसलिए, 5 की संख्या हमें अनुगामी शून्यों की संख्या बताएगी।
उदाहरण
इनपुट
number=6
आउटपुट
फैक्टोरियल में अनुगामी शून्यों की संख्या: 1
व्याख्या
फैक्टोरियल 720 है। 720 के अभाज्य गुणनखंड: 2^4 * 3^2 * 5^1। तो केवल एक (2,5) जोड़ी मौजूद है इसलिए अनुगामी शून्य 1 है।
इनपुट
number=12
आउटपुट
फैक्टोरियल में अनुगामी शून्यों की संख्या: 2
व्याख्या
फैक्टोरियल 479001600 है। अभाज्य गुणनखंड: 2^10 * 3^5 * 5^2 * 7^1 * 11^1। तो हमें (2,5) की 2 जोड़ियां मिल सकती हैं इसलिए अनुगामी शून्य 2 हैं।
दृष्टिकोण
इस दृष्टिकोण में हम संख्या को 5 की घातों से विभाजित करेंगे। यदि इसका परिणाम 1 से अधिक है तो अनुगामी शून्यों की संख्या 5 की संख्या होगी। इसे गिनती में जोड़ें।
एल्गोरिदम चरण
- एक पूर्णांक
numberइनपुट के रूप में लें। - फंक्शन
trailing_zeros(int number)numberलेता है और संख्या के फैक्टोरियल में अनुगामी शून्यों की संख्या लौटाता है। - प्रारंभिक गिनती 0 लें।
forलूप का उपयोग करके, संख्या को 5 की घातों से विभाजित करें।- यदि
number/i1 से अधिक या बराबर है, तो इस मान को गिनती में जोड़ें। - लूप के अंत में परिणाम के रूप में गिनती लौटाएं।
C++ कोड उदाहरण
#include <iostream>
using namespace std;
int trailing_zeros(int number) {
int count = 0;
for (int i = 5; number / i >= 1; i *= 5) {
int temp = number / i;
count = count + temp;
}
return count;
}
int main() {
int number = 50;
cout << "फैक्टोरियल में अनुगामी शून्यों की संख्या: " << trailing_zeros(number);
return 0;
}
आउटपुट
फैक्टोरियल में अनुगामी शून्यों की संख्या: 12