/**
 * 【程序4.1】
 * 题目:求100之内的素数(用数组存放)。
 * 程序分析:判断素数的方法:用一个数分别去除[2, sqrt(这个数)]之间的所有数,如果能被整除,
 *           则表明此数不是素数,反之是素数。
 */

#include <stdio.h>
#include <math.h>

#define N 101

int main()
{
    int a[N], i, j, line=0;
    for(i=0;i<N;i++)
    {
        a[i] = i;
    }
    for(i=0;i<N;i++)
    {
        if(a[i]==0|a[i]==1)
        {
            a[i]=0;
        }
        for(j=2;j<=sqrt(i);j++)
        {
            if(a[i]%j==0)
            {
                a[i]=0;
            }
        }
    }
    
    for (i = 0, line = 0; i < N; i++) {
        if (a[i] != 0) {
            printf("%5d", a[i]);
            line++;
        }
        if (line == 10) {
            printf("\n");
            line = 0;
        }
    }
}





/**
 * 注:
 * 素数:
 * 素数又称质数。所谓素数是指除了 1 和它本身以外,不能被任何整数整除的数,例如17就是素数,因为它不能被 2~16 的任一整数整除。
 * 
 * 思路1):因此判断一个整数m是否是素数,只需把 m 被 2 ~ m-1 之间的每一个整数去除,如果都不能被整除,那么 m 就是一个素数。
 *
 * 思路2):另外判断方法还可以简化。m 不必被 2 ~ m-1 之间的每一个整数去除,只需被 2 ~ sqrt(这个数)之间的每一个整数去除就可以了。如果 m 不能被 2 ~ sqrt(这个数)间任一整数整除,m 必定是素数。例如判别 17 是是否为素数,只需使 17 被 2~4 之间的每一个整数去除,由于都不能整除,可以判定 17 是素数。
 * 
 */