समस्या विवरण
हमें दो मान दिए गए हैं: अंकों की संख्या d और एक संख्या num। उन d-अंकीय संख्याओं की गिनती करनी है जो num से विभाज्य हैं।
उदाहरण
इनपुट: digit = 2, num = 12
आउटपुट: 8
2-अंकीय संख्याएं (10-99) जो 12 से विभाज्य: 12, 24, 36, 48, 60, 72, 84, 96
इनपुट: digit = 2, num = 9
आउटपुट: 10
18, 27, 36, 45, 54, 63, 72, 81, 90, 99
समाधान दृष्टिकोण (गणितीय - O(1))
- पहली d-अंकीय संख्या:
first = 10^(d-1) - अंतिम d-अंकीय संख्या:
last = 10^d - 1 - पहली विभाज्य संख्या:
firstDiv = first + (num - first%num)%num - अंतिम विभाज्य संख्या:
lastDiv = last - last%num - गिनती =
(lastDiv - firstDiv) / num + 1(यदि firstDiv ≤ lastDiv)
कार्यकारी प्रोग्राम
#include <bits/stdc++.h>
using namespace std;
int countDivisible(int digit, int num) {
long long first = pow(10, digit - 1);
long long last = pow(10, digit) - 1;
long long firstDiv = first + (num - first % num) % num;
long long lastDiv = last - last % num;
if (firstDiv > lastDiv) return 0;
return (lastDiv - firstDiv) / num + 1;
}
int main() {
int digit = 2, num = 9;
cout << "विभाज्य संख्याओं की गिनती: " << countDivisible(digit, num);
return 0;
}
आउटपुट
विभाज्य संख्याओं की गिनती: 10