समस्या विवरण
एक संख्या n दी गई है, जांचें कि क्या यह अपने अंकों के योग से विभाज्य है।
उदाहरण
| संख्या | अंकों का योग | विभाज्य? | आउटपुट |
|---|---|---|---|
| 55 | 5+5=10 | 55%10=5 ≠ 0 | नहीं |
| 12 | 1+2=3 | 12%3=0 | हाँ |
| 60 | 6+0=6 | 60%6=0 | हाँ |
| 132 | 1+3+2=6 | 132%6=0 | हाँ |
| 123 | 1+2+3=6 | 123%6=3 | नहीं |
एल्गोरिदम
- मूल संख्या को
tempमें संग्रहीत करें sum = 0आरंभ करें- जब तक
n > 0:digit = n % 10sum += digitn /= 10
- जांचें:
temp % sum == 0
C प्रोग्राम
#include <stdio.h>
#include <stdbool.h>
bool divisible_by_digit_sum(long n) {
long temp = n;
int sum = 0;
while (n > 0) {
sum += n % 10;
n /= 10;
}
return (temp % sum == 0);
}
int main() {
long num;
printf("संख्या दर्ज करें: ");
scanf("%ld", &num);
if (num <= 0) {
printf("धनात्मक पूर्णांक दर्ज करें\n");
return 1;
}
if (divisible_by_digit_sum(num))
printf("हाँ\n");
else
printf("नहीं\n");
return 0;
}
नमूना आउटपुट
संख्या दर्ज करें: 55 नहीं संख्या दर्ज करें: 12 हाँ
हार्शड संख्या (Niven संख्या)
ऐसी संख्याएं जो अपने अंकों के योग से विभाज्य होती हैं, हार्शड संख्याएं (या निवेन संख्याएं) कहलाती हैं।
पहली कुछ हार्शड संख्याएं: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 18, 20, 21, 24, 27, 30, 36, 40, 42, 45, 48, 50, 54, 60...
विस्तार: रेंज में हार्शड संख्याएं खोजें
void find_harshad_in_range(int start, int end) {
printf("%d से %d तक हार्शड संख्याएं:\n", start, end);
for (int i = start; i <= end; i++) {
int sum = 0, temp = i;
while (temp > 0) {
sum += temp % 10;
temp /= 10;
}
if (sum > 0 && i % sum == 0)
printf("%d ", i);
}
printf("\n");
}
जटिलता
- समय: O(log₁₀ n) - अंकों की संख्या
- स्थान: O(1)
संबंधित अवधारणा: मॉरन संख्या
यदि n / अंकों का योग एक अभाज्य संख्या है, तो n एक मॉरन संख्या है।
उदाहरण: 132 → योग=6, 132/6=22 (अभाज्य नहीं) → मॉरन नहीं
उदाहरण: 133 → योग=7, 133/7=19 (अभाज्य) → मॉरन संख्या!