C语言素数

求1-10000之间的素数,并打印出来。

使用了sbrk和brk函数,采用直接操作内存的方式,尽量减少循环次数,每次进行素数判断仅与之前的素数进行相除。该代码并不健壮,仅作练习用。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int *p;

int    Primer(int a,int *size);
main()
{
    int a=10000;
    int size;
    p=sbrk(0);
    Primer(a,&size);
    int i=0;
    for(;i<size;i++)
    {
        printf("%d
",p[i]);    
    }
}

int    Primer(int a,int *size)
{
    
    int i=0;
    int *r;
    int sizePr;
    if(a<4)
    {
        *size=a;
        r=p;
        for(;i<a;i++)
        {
            brk(r+1);
            *r=i+1;
            r=sbrk(0);
        }
    }
    else
    {        
        Primer(3,&sizePr);
        int j=4;
        for(;j<=a;j++)
        {
            int si=1;
            r=&p[sizePr];
            int c=0;
            for(;si<sizePr;si++)
            {
                if(j%p[si]==0)
                {
                    c=1;
                    break;
                }
            }
            if(c==0)
            {
                brk(r+1);
                *r=j;
                r=sbrk(0);
                sizePr++;
            }
        }
        *size=sizePr;
    }
    printf("Primer:%p
",p) ;
    return 0;
}
原文地址:https://www.cnblogs.com/fastcam/p/4794303.html