/**
 * 【程序4】
 * 题目:判断101-200之间有多少个素数,并输出所有素数。
 * 程序分析:判断素数的方法:用一个数分别去除[2, sqrt(这个数)]之间的所有数,如果能被整除,
 *           则表明此数不是素数,反之是素数。
 */

#include<stdio.h>
#include <math.h>
int main()
{
    int n, i, k, flag = 1;
    printf("101-200所有素数输出如下\n");
    for (n=101;n<=200;n++)
    {
        // 求平方根,注意sqrt()的参数为double类型,这里要强制转换n的值
        k = (int)sqrt((double)n);
        for (i=2;i<=k;i++)
        {
            if (n%i==0) 
            {
                flag = 0;
                break;
            }
        }
        if (flag == 1){
            printf("%d\n", n);
        }
        flag = 1;
    }
    return 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 是素数。
 * 
 */