Definición de número primo:
Número primo: Número primo que no tiene divisores excepto 1 y él mismo.
Código:
Método 1: División de prueba: determine si i es un número primo: use todos los datos entre [2, i) para dividirlos por i. Siempre que uno de ellos se pueda dividir en partes iguales, no es un número primo.
int main()
{
int i = 0;
int count = 0;
// 外层循环用来获取100~200之间的所有数据,100肯定不是素数,因此i从101开始
for (i = 101; i <= 200; i++)
{
//判断i是否为素数:用[2, i)之间的每个数据去被i除,只要有一个可以被整除,则不是素数
int j = 0;
for (j = 2; j < i; j++)
{
if (i % j == 0)
{
break;
}
}
// 上述循环结束之后,如果j和i相等,说明[2, i)之间的所有数据都不能被i整除,则i为素数
if (j == i)
{
count++;
printf("%d ", i);
}
}
printf("\ncount = %d\n", count);
return 0;
}
Método dos: método de optimización uno. Cada vez que obtiene un dato, solo necesita obtener los datos en el intervalo [2, i/2], porque la otra mitad de los datos se puede obtener multiplicando la primera mitad de los datos por 2.
int main()
{
int i = 0;//
int count = 0;
for (i = 101; i <= 200; i++)
{
//判断i是否为素数
//2->i-1
int j = 0;
for (j = 2; j <= i / 2; j++)
{
if (i % j == 0)
{
break;
}
}
//...
if (j > i / 2)
{
count++;
printf("%d ", i);
}
}
printf("\ncount = %d\n", count);
return 0;
}
Método 3: Optimice nuevamente. Si i puede ser divisible por cualquier dato entre [2, sqrt(i)], entonces i no es un número primo. Razón: si m puede ser divisible por cualquier número entero entre 2 ~ m-1,
es Uno de los dos factores debe ser menor o igual a sqrt(m) y el otro debe ser mayor o igual a sqrt(m).
int main()
{
int i = 0;
int count = 0;
for (i = 101; i <= 200; i++)
{
//判断i是否为素数
//2->i-1
int j = 0;
for (j = 2; j <= sqrt(i); j++)
{
if (i % j == 0)
{
break;
}
}
//...
if (j > sqrt(i))
{
count++;
printf("%d ", i);
}
}
printf("\ncount = %d\n", count);
return 0;
}
Método 4: De hecho, i no necesita aumentar gradualmente de 101 a 200 durante la operación, porque a excepción de 2 y 3, no habrá dos datos adyacentes consecutivos que sean números primos al mismo tiempo.
int main()
{
int i = 0;
int count = 0;
for (i = 101; i <= 200; i += 2)
{
//判断i是否为素数
//2->i-1
int j = 0;
for (j = 2; j <= sqrt(i); j++)
{
if (i % j == 0)
{
break;
}
}
//...
if (j > sqrt(i))
{
count++;
printf("%d ", i);
}
}
printf("\ncount = %d\n", count);
return 0;
}