समस्या विवरण
एक पूर्णांक num इनपुट के रूप में दिया गया है। लक्ष्य गुणनफल 1^1 × 2^2 × 3^3 × ... × num^num में अनुगामी शून्यों की संख्या ज्ञात करना है।
उदाहरण
इनपुट
num=5
आउटपुट
अनुगामी शून्यों की संख्या: 5
व्याख्या
गुणनफल में 2 और 5 की संख्या: 1^1 * 2^2 * 3^3 * 4^4 * 5^5 = 1^1 * 2^2 * 3^3 * (2^2)^4 * 5^5। तो कुल 10 दो और 5 पांच, न्यूनतम 5 है इसलिए अनुगामी शून्य 5 होंगे।
इनपुट
num=10
आउटपुट
अनुगामी शून्यों की संख्या: 15
व्याख्या
गुणनफल में 2 और 5 की संख्या: 1^1 * 2^2 * 3^3 * 4^4 * 5^5 * 6^6 * 7^7 * 8^8 * 9^9 * 10^10 = 1^1 * 2^2 * 3^3 * 4^4 * 5^5 * 6^6 * 7^7 * 8^8 * 9^9 * (2*5)^10। तो कुल 20 दो और 15 पांच, न्यूनतम 15 है इसलिए अनुगामी शून्य 15 होंगे।
दृष्टिकोण
इस दृष्टिकोण में हम गुणनफल में प्रत्येक संख्या के अभाज्य गुणनखंड में 2 और 5 की संख्या गिनेंगे। चूंकि प्रत्येक संख्या अपनी स्वयं की घात पर उठाई जाती है, गुणनखंड में 2 या 5 की गिनती का न्यूनतम अनुगामी शून्यों की संख्या देगा। प्रत्येक 2*5 गुणनफल में एक 0 जोड़ता है।
एल्गोरिदम चरण
- एक पूर्णांक
numइनपुट के रूप में लें। - फंक्शन
count_trailing(int num)numलेता है और अनुगामी शून्यों की संख्या लौटाता है। - प्रारंभिक गिनती 0 लें।
- चर
temp_2 = 0,temp_5 = 02 और 5 की गिनती के लिए लें। forलूप का उपयोग करकेi=1सेi<=numतक पार करें।tempकोiके रूप में लें।- जब तक
temp2 से विभाज्य है, इसे आधा करें और 2 की संख्या के रूप मेंiकोtemp_2में जोड़ें। - जब तक
temp5 से विभाज्य है, इसे 5 से विभाजित करें और 5 की संख्या के रूप मेंiकोtemp_5में जोड़ें। - दोनों गिनती का न्यूनतम लेकर गिनती लें:
count = min(temp_2, temp_5)। - परिणाम के रूप में गिनती लौटाएं।
C++ कोड उदाहरण
#include <bits/stdc++.h>
using namespace std;
int count_trailing(int num) {
int count = 0;
int temp_2 = 0;
int temp_5 = 0;
for (int i = 1; i <= num; i++) {
int temp = i;
while(temp % 2 == 0 && temp > 0) {
temp = temp / 2;
temp_2 = temp_2 + i;
}
while (temp % 5 == 0 && temp > 0) {
temp = temp / 5;
temp_5 = temp_5 + i;
}
}
count = min(temp_2, temp_5);
return count;
}
int main() {
int num = 5;
cout << "अनुगामी शून्यों की संख्या: " << count_trailing(num);
return 0;
}
आउटपुट
अनुगामी शून्यों की संख्या: 5