mirror of
https://github.com/TheAlgorithms/C
synced 2024-11-21 21:11:57 +03:00
Merge pull request #593 from shellhub/dev
[doc fix and add test]fix documentation in prime and strong number
This commit is contained in:
commit
1a13794cfe
60
misc/prime.c
60
misc/prime.c
@ -1,15 +1,27 @@
|
|||||||
|
/**
|
||||||
|
* @file
|
||||||
|
* @brief Program to identify if a number is [prime
|
||||||
|
* number](https://en.wikipedia.org/wiki/Prime_number) or not
|
||||||
|
*/
|
||||||
|
#include <assert.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
#include <stdbool.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
int isPrime(int x)
|
/**
|
||||||
|
* Check if a given number is prime number or not
|
||||||
|
* @param x number to check
|
||||||
|
* @return `true` if given number is prime number, otherwise `false`
|
||||||
|
*/
|
||||||
|
bool isPrime(int x)
|
||||||
{
|
{
|
||||||
if (x == 2)
|
if (x == 2)
|
||||||
{
|
{
|
||||||
return 1;
|
return true;
|
||||||
}
|
}
|
||||||
if (x < 2 || x % 2 == 0)
|
if (x < 2 || x % 2 == 0)
|
||||||
{
|
{
|
||||||
return 0;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
double squareRoot = sqrt(x);
|
double squareRoot = sqrt(x);
|
||||||
@ -17,19 +29,43 @@ int isPrime(int x)
|
|||||||
for (int i = 3; i <= squareRoot; i += 2)
|
for (int i = 3; i <= squareRoot; i += 2)
|
||||||
{
|
{
|
||||||
if (x % i == 0)
|
if (x % i == 0)
|
||||||
return 0;
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return 1;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test function
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
void test()
|
||||||
|
{
|
||||||
|
/* all the prime numbers less than 100 */
|
||||||
|
int primers[] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41,
|
||||||
|
43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97};
|
||||||
|
for (size_t i = 0, size = sizeof(primers) / sizeof(primers[0]); i < size;
|
||||||
|
++i)
|
||||||
|
{
|
||||||
|
assert(isPrime(primers[i]));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Example Non-prime numbers */
|
||||||
|
int NonPrimers[] = {-1, 0, 1, 4, 6, 8, 9, 10};
|
||||||
|
for (size_t i = 0, size = sizeof(NonPrimers) / sizeof(NonPrimers[0]);
|
||||||
|
i < size; ++i)
|
||||||
|
{
|
||||||
|
assert(!isPrime(NonPrimers[i]));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Driver Code
|
||||||
|
* @return None
|
||||||
|
*/
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
int a;
|
test();
|
||||||
printf("Input a number to see if it is a prime number:\n");
|
|
||||||
scanf("%d", &a);
|
|
||||||
if (isPrime(a))
|
|
||||||
printf("%d is a prime number.\n", a);
|
|
||||||
else
|
|
||||||
printf("%d is not a prime number.\n", a);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1,38 +1,57 @@
|
|||||||
/**
|
/**
|
||||||
* Modified on 07/12/2017, Kyler Smith
|
* @file
|
||||||
*
|
* @brief Strong number is a number whose sum of all digits’ factorial is equal
|
||||||
* A number is called strong number if sum of the
|
* to the number n For example: 145 = 1!(1) + 4!(24) + 5!(120)
|
||||||
* factorial of its digit is equal to number itself.
|
|
||||||
*/
|
*/
|
||||||
|
#include <assert.h>
|
||||||
|
#include <stdbool.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
void strng(int a)
|
/**
|
||||||
|
* Check if given number is strong number or not
|
||||||
|
* @param number
|
||||||
|
* @return `true` if given number is strong number, otherwise `false`
|
||||||
|
*/
|
||||||
|
bool isStrong(int number)
|
||||||
{
|
{
|
||||||
int j = a;
|
if (number < 0)
|
||||||
int sum = 0;
|
|
||||||
int b, i, fact = 1;
|
|
||||||
while (a > 0)
|
|
||||||
{
|
{
|
||||||
fact = 1;
|
return false;
|
||||||
b = a % 10;
|
|
||||||
for (i = 1; i <= b; i++)
|
|
||||||
{
|
|
||||||
fact = fact * i;
|
|
||||||
}
|
|
||||||
a = a / 10;
|
|
||||||
sum = sum + fact;
|
|
||||||
}
|
}
|
||||||
if (sum == j)
|
int sum = 0;
|
||||||
printf("%d is a strong number", j);
|
int originalNumber = number;
|
||||||
else
|
while (originalNumber != 0)
|
||||||
printf("%d is not a strong number", j);
|
{
|
||||||
|
int remainder = originalNumber % 10;
|
||||||
|
int factorial = remainder == 0 ? 0 : 1; /* 0! == 1 */
|
||||||
|
|
||||||
|
/* calculate factorial of n */
|
||||||
|
for (int i = 1; i <= remainder; factorial *= i, i++)
|
||||||
|
{
|
||||||
|
;
|
||||||
|
}
|
||||||
|
sum += factorial;
|
||||||
|
originalNumber /= 10;
|
||||||
|
}
|
||||||
|
return number == sum;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test function
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
void test()
|
||||||
|
{
|
||||||
|
assert(isStrong(145)); /* 145 = 1! + 4! + 5! */
|
||||||
|
assert(!isStrong(543)); /* 543 != 5!+ 4! + 3! */
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Driver Code
|
||||||
|
* @return None
|
||||||
|
*/
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
int a;
|
test();
|
||||||
printf("Enter the number to check");
|
|
||||||
scanf("%d", &a);
|
|
||||||
strng(a);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user