समस्या विवरण
इस प्रोग्राम में, हमें Q क्वेरीज़ दी गई हैं, प्रत्येक क्वेरी में एक धनात्मक पूर्णांक N होता है। हमारा कार्य C++ में एक संख्या के सभी गुणनखंडों के विषम अंकों के योग पर क्वेरीज़ को हल करने के लिए एक प्रोग्राम बनाना है।
प्रत्येक क्वेरी को हल करने के लिए, हमें संख्या N के सभी गुणनखंड ढूंढने होंगे। फिर जिन गुणनखंडों का अंकों का योग विषम है, उन्हें जोड़ें। और प्रत्येक क्वेरी के लिए अंतिम योग वापस करें।
उदाहरण
इनपुट
Q = 2, queries = {15, 8}
आउटपुट
8 1
व्याख्या
क्वेरी 1 के लिए: N = 15, 15 के गुणनखंड हैं 1, 3, 5, 15।
गुणनखंडों में विषम अंकों का योग 1 + 3 + 5 = 8
क्वेरी 2 के लिए: N = 8, 8 के गुणनखंड हैं 1, 2, 4, 8।
गुणनखंडों में विषम अंकों का योग 1 = 1
समाधान दृष्टिकोण
इस समस्या को हल करने के लिए, हमें सभी संख्याओं के विषम अंकों का योग चाहिए। जिससे हम गुणनखंडों की गणना करेंगे और फिर परिणाम के लिए उन्हें जोड़ेंगे। इस अंकों के योग की प्रक्रिया को आसान बनाने के लिए हम पूर्व-गणना किए गए मानों का उपयोग कर सकते हैं। उदाहरण के लिए, संख्या 41 का योग 4 के विषम अंकों के योग + 1 के विषम अंकों के योग के रूप में पाया जा सकता है।
oddDigitSum सरणी बनाने के बाद, हम उन सभी संख्याओं को ढूंढेंगे जो दी गई संख्या को विभाजित कर सकती हैं। फिर, हम oddDigitSum सरणी का उपयोग करके सभी विषम अंकों को जोड़ेंगे।
कार्यक्रम उदाहरण
#include <iostream>
using namespace std;
#define N 99999
void calcOddDigitSum(int oddDigitSum[]) {
for (int i = 1; i < N; i++)
oddDigitSum[i] = oddDigitSum[i / 10] + (i & 1) * (i % 10);
}
void findFactorSum(int oddDigitSum[], int factorSum[]) {
for (int i = 1; i < N; i++)
for (int j = i; j < N; j += i)
factorSum[j] += oddDigitSum[i];
}
int main(){
int Q = 3;
int query[] = { 5, 154, 98 };
int oddDigitSum[N];
int factorSum[N];
calcOddDigitSum(oddDigitSum);
findFactorSum(oddDigitSum, factorSum);
for (int i = 0; i < Q; i++)
cout << "क्वेरी " << (i+1) << ": संख्या के सभी गुणनखंडों के विषम अंकों का योग " << factorSum[query[i]] << endl;
return 0;
}
आउटपुट
क्वेरी 1: संख्या के सभी गुणनखंडों के विषम अंकों का योग 6 क्वेरी 2: संख्या के सभी गुणनखंडों के विषम अंकों का योग 31 क्वेरी 3: संख्या के सभी गुणनखंडों के विषम अंकों का योग 27