用筛选法求100以内的素数(筛选法!!!)

#include<stdio.h>
#include<math.h>
int main()
{
    int a[101],i,j;

    for(i=1; i<=100; i++)
    {
        a[i] = i;   //为数组赋初值
    }
    a[1] = 0;//先去掉a[1]

    for(i=2; i<sqrt(100); i++)  //如果需要找1-n范围内的素数表,只须进行到除数为根号下n(取整数就可)
    {
        for(j=i+1; j<=100; j++)
            if( a[i]!=0 && a[j]!=0 )
                if(a[j]%a[i] == 0)
                {
                    a[j] = 0;
                }

    }

    printf("
");
    int n;

    for(i=2,n=0; i<=100; i++)
    {
        if(a[i]!=0)
        {
            printf("%5d",a[i]);
            n++;
        }

        if(n==10)
        {
            printf("
");
            n = 0;//一次完成之后初始化
        }
    }


    return 0;
}

所谓筛选法是“埃拉托色尼筛法“,将一组数据逐个判断他们是否素数,找出一个非素数,就把它挖掉,最后剩下的就是素数

算法可表示为;

(1)挖去1;

(2)用下一个未被挖去的数p除p后面各数,把p的倍数挖掉

(3)检查p是否小于根号n的整数部分,如果是,则返回(2)继续执行,否则就结束

(4)剩下的就是素数

原文地址:https://www.cnblogs.com/18191xq/p/12738216.html