【Conocimiento matemático】|Números primos, números primos|Examinar números primos, descomponer factores primos|Conclusiones matemáticas simples

Uno, un número primo

1, un número primo

Los números primos también se llaman números primos. Primero, veamos la definición de números primos. Los números primos se refieren a números enteros positivos que solo pueden ser divisibles por 1 y por sí mismo.

En otras palabras, un número es primo si no tiene más factores que 1 y él mismo. Por ejemplo, 2, 3, 5, 7, 11, 13, etc. son todos números primos. 4, 6, 8, 9, 10, etc. no son números primos.

Preguntas frecuentes sobre números primos

Cuando el número menor o igual a 1 no es un número primo,
y el número menor que 0 no es un número primo
2 es un número primo,
los valores de estos semiejes negativos son los más propensos a errores de juicio de límites .

2. factor primo

Los factores primos están todos compuestos de números primos. Use el método de descomposición para descomponerlo en n = número primo 1 * grado 1 * número primo 2 * grado 2 * ... El
factor primo descompuesto de la escuela primaria es equivalente a .. ., ver una imagen
inserte la descripción de la imagen aquí

En segundo lugar, si es un número primo

Lo más importante de es o no es primo es lo que significa por definición, solo 1 y él mismo pueden dividirse por su Mod 0, que es simple

#include <iostream>
using namespace std ;
int n ;
bool is_prime () 
{
    
     
	if( n <= 1) return false ;
	for ( int i = 2 ; i < n ; i ++ )
		if(n % i == 0)
			return false ;
	return true ;
}
int main () 
{
    
    
	
	cin >> n ;
	if(is_prime())
		cout << "YES , is prime" ;
	else 
		cout << "NO , is not prime" ;
	cout << endl ;
	return 0 ;
}

Simplificando, en primer lugar, este algoritmo debe tener una complejidad temporal de O(N) , sabemos que los factores siempre aparecen en pares, y el factor más grande es i * i = n, solo necesitamos atravesar este valor.

//仅仅修改上文第六行
for(int i = 2 ; i  <= n / i ; i ++ ) 

En primer lugar, la mejor manera de lidiar con este i es i <= n / i, otros métodos pueden informar errores, por lo que no entraré en detalles.

Tercero, descomponer el factor primo

Dos puntos, uno es que el recorrido general de dos al máximo solo puede ser n / i , y el valor restado en la operación recursiva, el recorrido **O(N)** es la mayor complejidad de tiempo

#include <iostream>
using namespace std ;

int n ;

void prime_son()
{
    
    
	for(int i = 2 ; i <= n / i ; i ++ )
	{
    
    
		if(n % i == 0)
		{
    
    
			int ans = 0;
			while ( n % i == 0)
			{
    
    
				n /= i ;
				ans ++ ;
			}
			cout << i << " " << ans << endl ;
		}
	}
	if(n != 1)
		cout << n << " " << 1 << endl ;
	return ;
}

int main ()
{
    
    
	cin >> n ;
	prime_son() ;
	return 0 ;
}

Cuarto, ¿cuántos números primos hay en los primeros n números?

Sabemos que esencialmente solo hay una forma de buscar números primos entre los primeros n números, que es asignar los números primos conocidos al frente. La operación más simple es asignar un valor cada vez.

#include <iostream>
using namespace std ;

const int N = 1e6 + 10;
bool st[N] ;
int get_prime(int n ) 
{
    
    
    int ans = 0 ;
    for( int i = 2 ; i <= n ; i ++ )
    {
    
    
        if(!st[i])
        ans ++ ;
        for(int j = i ; j <= n ; j += i )
            st[j] = true ;
    }
    return ans ;
}

int main () 
{
    
    
    int n ;
    cin >> n ;
    cout << get_prime(n) << endl ;
    return 0 ;
}

Pero también podemos hacer esto cada vez con el factor de su número primo

#include <iostream>
using namespace std ;

int n ;
const int N = 1e6 + 10 ;

int prime[N] ;
int cnt = 0 ;
bool st[N] ;
int get_prime() 
{
    
    
    for(int i = 2 ; i <= n  ; i ++ )
    {
    
    
        if(!st[i])
        prime[++ cnt]  = i ;
        for(int j = 1; prime[j] <= n / i ; j ++ )
        {
    
    
            st[prime[j] * i ] = true ;
            if(i % prime[j] == 0 ) break ;
        }
    }
    return cnt ;
}

int main ()
{
    
    
    cin >> n ;
    cout << get_prime() << endl ;

    return 0 ;
}

Esta complejidad de tiempo es O(N) , por lo que se llama el método de tamiz lineal. Expliquemos el principio. Primero, primero tomamos la operación de número primo cada vez, y luego realizamos la operación de asignación en el siguiente número primo establecido en este punto y, a continuación, aparece en el punto.

Supongo que te gusta

Origin blog.csdn.net/wen030803/article/details/132004849
Recomendado
Clasificación