#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.