प्लस परफेक्ट नंबर (आर्मस्ट्रांग संख्या)
एक संख्या प्लस परफेक्ट (आर्मस्ट्रांग) है यदि इसके अंकों के nवें घात का योग (n = अंकों की संख्या) संख्या के बराबर हो।
सूत्र
n अंकों की संख्या के लिए: Σ(अंकⁿ) = संख्या
उदाहरण
| संख्या | अंक | गणना | योग | आर्मस्ट्रांग? |
|---|---|---|---|---|
| 163 | 1,6,3 | 1³+6³+3³ = 1+216+27 | 244 | नहीं |
| 371 | 3,7,1 | 3³+7³+1³ = 27+343+1 | 371 | हाँ |
| 1634 | 1,6,3,4 | 1⁴+6⁴+3⁴+4⁴ = 1+1296+81+256 | 1634 | हाँ |
| 9474 | 9,4,7,4 | 9⁴+4⁴+7⁴+4⁴ | 9474 | हाँ |
ज्ञात आर्मस्ट्रांग संख्याएं (आधार 10)
1 अंक: 0-9 (सभी) 3 अंक: 153, 370, 371, 407 4 अंक: 1634, 8208, 9474 5 अंक: 54748, 92727, 93084 6 अंक: 548834 7 अंक: 1741725, 4210818, 9800817, 9926315 8 अंक: 24678050, 24678051, 88593477
C प्रोग्राम
#include <stdio.h>
#include <math.h>
int count_digits(int n) {
int count = 0;
if (n == 0) return 1;
while (n != 0) {
count++;
n /= 10;
}
return count;
}
int power(int base, int exp) {
int result = 1;
while (exp > 0) {
result *= base;
exp--;
}
return result;
}
bool is_armstrong(int n) {
if (n < 0) return false;
int original = n;
int digits = count_digits(n);
int sum = 0;
while (n > 0) {
int digit = n % 10;
sum += power(digit, digits);
n /= 10;
}
return sum == original;
}
int main() {
int n;
printf("संख्या दर्ज करें: ");
scanf("%d", &n);
if (is_armstrong(n))
printf("%d एक आर्मस्ट्रांग संख्या है\n", n);
else
printf("%d आर्मस्ट्रांग संख्या नहीं है\n", n);
return 0;
}
नमूना आउटपुट
संख्या दर्ज करें: 1634 1634 एक आर्मस्ट्रांग संख्या है संख्या दर्ज करें: 163 163 आर्मस्ट्रांग संख्या नहीं है
अनुकूलन: पूर्व-गणना घातांक
bool is_armstrong_fast(int n) {
if (n < 0) return false;
if (n < 10) return true; // एकल अंक
int digits = count_digits(n);
int powers[10];
// 0-9 के लिए digit^digits पूर्व-गणना करें
for (int i = 0; i <= 9; i++) {
powers[i] = 1;
for (int j = 0; j < digits; j++)
powers[i] *= i;
}
int sum = 0, temp = n;
while (temp > 0) {
sum += powers[temp % 10];
temp /= 10;
}
return sum == n;
}
रेंज में सभी आर्मस्ट्रांग संख्याएं खोजें
void find_armstrong_range(int start, int end) {
printf("%d से %d तक आर्मस्ट्रांग संख्याएं:\n", start, end);
for (int i = start; i <= end; i++) {
if (is_armstrong_fast(i))
printf("%d ", i);
}
printf("\n");
}
सामान्यीकरण: आधार b में आर्मस्ट्रांग
अवधारणा किसी भी आधार के लिए काम करती है। आधार 10 में उपरोक्त सूचीबद्ध हैं।