/* * Program to Check Prime or Armstrong Number * It does this same as armstrng.c, but uses long data types to be able check Numbers over 65536 */ #include int checkPrimeNumber(unsigned long); int checkArmstrongNumber(unsigned long); unsigned long pow(int, int); /* Entry point to program */ int main() { unsigned long num; int flag; printf("Enter a positive integer: "); scanf("%ld", &num); /* Check prime number */ flag = checkPrimeNumber(num); if (flag == 1) printf("%lu is a prime number.\n", num); else printf("%lu is not a prime number.\n", num); /* Check Armstrong number */ flag = checkArmstrongNumber(num); if (flag == 1) printf("%ld is an Armstrong number.", num); else printf("%ld is not an Armstrong number.", num); return 0; } /* Function check Armstrong number */ int checkPrimeNumber(unsigned long num) { unsigned long i; int flag = 1; for (i = 2; i <= num / 2; ++i) { /* Condition for non-prime number */ if (num % i == 0) { flag = 0; break; } } return flag; } /* Function check Armstrong number */ int checkArmstrongNumber(unsigned long num) { unsigned long original, rem, result = 0; int n = 0, flag; original = num; while (original != 0) { original /= 10; ++n; } original = num; while (original != 0) { rem = original % 10; result += pow(rem, n); original /= 10; } /* Condition for Armstrong number */ if (result == num) flag = 1; else flag = 0; return flag; } /* Function computes the power of a number */ unsigned long pow(int base, int exponent) { unsigned long pow = 1; for (exponent; exponent > 0; exponent--) { pow = pow * base; } return pow; }