#include <stdio.h>
int main() {
/* 方法1:
求素数数量,总数减非素数数量
int totalNum = (999 - 100) + 1;
int count = 0;
for (int i = 100; i < 1000; i++)
{
for (int j = 2; j * j <= i; j++)
{
if (i % j == 0)
{
count++;
break;
}
}
}
printf("%d\n", totalNum - count);
*/
/* 方法2:
用flag标记,1为素数,0为非素数;
默认flag为1,若在内循环i被j整除,则设flag为0,表示i为非素数;
内循环判断完后判断flag值,flag为1则prime++;
注意要将flag重置为1
int prime = 0, flag = 1;
for (int i = 100; i < 1000; i++) {
for (int j = 2; j * j <= i; j++) {
if (i % j == 0) {
flag = 0;
break;
}
}
if (flag == 1) {
prime++;
}
flag = 1;
}
printf("%d\n", prime);
*/
/* 方法3:
当j * j <= i时,i % j == 0,那么说明i能被j整除,i不是素数
当j * j > i时,说明i % j != 0,说明i不能被j整除,i是素数
注意除数j重置为2,因为j的作用域为整个外循环
*/
int cnt = 0;
int i, j;
for (i = 100; i < 1000; i++) {
for (j = 2; j * j <= i; j++) {
if (i % j == 0) {
break;
}
}
if (j * j > i) {
cnt++;
}
// Reset divisor
j = 2;
}
printf("%d\n", cnt);
return 0;
}