IHYPRESS.NET > C PROGRAMMING
C > 06. Functions II (Pointers) [PROGRAM #03]
CODERESULT
<
```/* Problem: Write a function that determines if a number
is prime or not. The function must return 1 if prime, 0 if not.
In addition, the function must "return" the value of one
of the divisors. */

#include <stdio.h>
#include <math.h>

/* function returns true if n is even.  */
/* it returns false if n is odd         */
int
even (int n)
{
return (!(n%2));
}

/* function returns true if n is prime,
the pointer variable references the divisor value */
int
prime2 (int n, int *divisor)
{
int i, is_prime;

/* looking for a divisor. if found, it
is not a prime number */
*divisor = 0;

/* eliminating even numbers except 2 */
if (even (n))
{
if (n==2)
*divisor=0;
else
*divisor=2;
}
else
{
if (n==1)
*divisor=0; /* 1 is a prime number */
else
/* trying to divide number by 3,5,7,... */
/* to find a divisor until sqrt(n)      */
for (i=3; i<=sqrt(n); i=i+2)
{
if (!(n%i))
*divisor=i;
}
}

is_prime = *divisor;

/* if there is a divisor then NOT prime */

return (!is_prime);
}

int
main (void)
{
int x, div;

printf ("Enter a positive integer number: ");
scanf ("%d", &x);

/*  testing for prime and printing the report */
if (prime2 (x, &div))
printf ("%d is a prime number.\n", x);
else
printf ("%d not prime number. Divisible by %d.\n", x, div);

return (0);
}
Legend:
preprocessor directives | variable declarations
main function | helper functions | user-defined structures
```Enter a positive integer number: 77