Cuatro formas de imprimir números primos

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;
}

Supongo que te gusta

Origin blog.csdn.net/2301_77868664/article/details/131768184
Recomendado
Clasificación