
Check if a number is prime or not
By: a guest on
Aug 5th, 2012 | syntax:
C | size: 1.16 KB | hits: 22 | expires: Never
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int max, num;
int *start, *primes;
int prime(int i) {
if(num%primes[i] == 0)
return 0;
if(i<max)
prime(++i);
return 1;
}
int main(void) {
int i, j;
printf("Insert the number: ");
scanf("%d", &num);
if(num < 2) {
printf("You must insert a number greater than 1.");
return -1;
} else if(num == 2) {
printf("%d is prime.", num);
return 0;
} else if(num%2 == 0) {
printf("%d is NOT prime.", num);
return 1;
}
max = ((int)(sqrt(num)-0.5)%2 == 0) ? (int)(sqrt(num)-0.5)/2 : ((int)(sqrt(num)-0.5)-1)/2;
start = calloc(max, sizeof(int));
for(i=0; i<max; i++)
start[i] = (i*2)+3;
for(i=0; i<max; i++) {
if(start[i] == 0)
continue;
for(j=(i+1); j<max; j++)
if(start[j] != 0 && start[j]%start[i] == 0)
start[j] = 0;
}
for(i=0, j=0; i<max; i++)
if(start[i] != 0) {
primes = realloc(primes, j+1);
primes[j++] = start[i];
}
if(prime(0))
printf("%d is prime.", num);
else
printf("%d is NOT prime.", num);
free(start);
free(primes);
return 0;
}