इस समस्या में, हमें एक पूर्णांक n दिया गया है। हमारा कार्य n के सभी भाजकों में अंकों का सबसे बड़ा योग ढूंढना है।
समस्या विवरण: यहां, हम संख्या n के उस भाजक को ढूंढेंगे जिसके अंकों का योग सबसे बड़ा है।
समस्या को समझने के लिए एक उदाहरण लेते हैं,
इनपुट: 18
आउटपुट: 9
व्याख्या:
18 के सभी भाजक हैं 1, 2, 3, 6, 9, 18।
अधिकतम अंक योग 9 है।
समाधान दृष्टिकोण
संख्या N के सभी भाजक ढूंढें। और फिर प्रत्येक भाजक के अंकों का योग ढूंढें और फिर सबसे बड़े योग वाला मान वापस करें।
हमारे समाधान की कार्यप्रणाली को दर्शाने वाला प्रोग्राम,
उदाहरण
#include <iostream>
using namespace std;
int calcDigitSum(int n) {
int sum = 0;
while (n != 0) {
sum = sum + n % 10;
n = n/10;
}
return sum;
}
int largestDigitSumdivisior(int n) {
int maxSum = 0;
for (int i = 1; i <= n; i++)
if (n % i == 0)
maxSum = max(maxSum, calcDigitSum(i));
return maxSum;
}
int main() {
int n = 45;
cout<<"The divisor with largest sum of digits is "<<largestDigitSumdivisior(n)<<endl;
return 0;
}
आउटपुट
The divisor with largest sum of digits is 9
समाधान को भाजक ढूंढने की विधि को संशोधित करके और इसे अधिक प्रभावी बनाकर अधिक प्रभावी बनाया जा सकता है।
इस समस्या में, हम sqrt(n) तक पुनरावृति करेंगे और सभी भाजक ढूंढेंगे और अन्य भाजक n/div का उपयोग करके गणना किए जाते हैं। यह भाजक ढूंढने की समय जटिलता को sqrt(n) तक कम कर देता है।
हमारे समाधान की कार्यप्रणाली को दर्शाने वाला प्रोग्राम,
उदाहरण
#include <iostream>
using namespace std;
int calcDigitSum(int n) {
int sum = 0;
while (n != 0) {
sum = sum + n % 10;
n = n / 10;
}
return sum;
}
int largestDigitSumdivisior(int n) {
int maxSum = 0;
for (int i = 1; i*i <= n; i++) {
if (n % i == 0) {
maxSum = max(maxSum, calcDigitSum(i));
maxSum = max(maxSum,calcDigitSum(n/i));
}
}
return maxSum;
}
int main() {
int n = 32;
cout<<"The divisor with largest sum of digits is "<<largestDigitSumdivisior(n)<<endl;
return 0;
}
आउटपुट
The divisor with largest sum of digits is 8