c code:
#include <stdio.h>
#include <stdlib.h>
int printp(int*);
int print(int*);
int main (void)
{
int *arr=NULL,*pi=NULL;
int n,p,pv;
int i=0;
char a;
printf("enter the number: "); scanf("%d", &n);
// init mem
pi = malloc(n*sizeof(int));
// lets call it arr
arr = pi;
// initialize values
for(i = 2; i <= n; i++){ *pi = i; pi++; }
*pi = -1; // end indicator
printf("arr: "); print(arr);
// point to first one
p = 0;
// terminate if value of p^^2 exceeds n
while(arr[p]*arr[p]<n){
// srike out all multiples of p i.e. make them zero
pv = arr[p];
for(i = p+1; arr[i] != -1; i++){
if(arr[i] == 0) continue;
if(arr[i] % pv == 0){
arr[i]=0;
}
}
// point to next non-zero number
for(i=p+1;arr[i]!=-1;i++){
if(arr[i] == 0) continue;
p = i; break;
}
if(arr[i]==-1) break; // next-nonzero not available
//printf("p: %d\n", p);
//print(arr);
//scanf("%c",&a);
}
// now all non-zero no. are primes
printf("primes: "); printp(arr);
return 0;
}
int printp(int* arr){
int i;
for(i = 0;arr[i]!=-1; i++){
if(arr[i] == 0) continue;
printf("%d ", arr[i]);
}
printf("\n");
}
int print(int* arr){
int len=0,i;
for(i = 0;arr[i]!=-1; i++){
printf("%d ", arr[i]);
}
printf("\n");
}
On Nov 29, 6:50 pm, harit agarwal <[email protected]> wrote:
> read this
>
> http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes
--
You received this message because you are subscribed to the Google Groups
"Algorithm Geeks" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/algogeeks?hl=en.