#include <stdio.h>
typedef enum {
FALSE = 0,
TRUE = 1
} BOOL;
char *boolstr[] = {"FALSE", "TRUE"};
BOOL is_even(unsigned int k)
{
if (k % 2) return FALSE;
return TRUE;
}
BOOL is_prime(unsigned long k, unsigned long *divisor)
{
unsigned long testnum,testlimit;
BOOL ret = FALSE;
if (k == 1) return FALSE; // 1 is neigher prime neither composite
if (k == 2) return TRUE;
if (is_even(k)) return FALSE; // even numbers are never prime, except 2
testlimit = k;
testnum = 3;
while (testnum < testlimit) {
//printf("highest prime divisor=%lu\n",*divisor);
if ( (k % testnum) == 0)
{
*divisor = testnum;
printf("div=%lu\n", *divisor);
return FALSE; //return TRUE;
// k is not prime as it is divisable by l
}
testlimit = k/testnum;
testnum += 2;
}
return TRUE;
}
int main()
{
unsigned long k,divisor;
divisor=1;
printf("Enter an integer: ");
scanf("%lu", &k);
printf("k=%lu is even? %s\n", k, boolstr[is_even(k)]);
if (is_prime(k, &divisor))
{
printf("k=%lu is prime? %s\n", k, boolstr[TRUE]);
}
else
{
printf("%lu is NOT prime\n", k);
//printf("highest prime divisor = %lu\n", divisor);
}
}
Tuesday, October 12, 2010
To test Prime Number
Subscribe to:
Post Comments (Atom)
Lutfi,
ReplyDeleteYou can make it faster by dividing the number with the previous prime numbers, up to the square root of that number.
KOkon.