"Base matemática seguridad de la información de un" primer notas de capítulo

"Base matemática seguridad de la información de un" primer notas de capítulo

divisible

  • Se define
    en un dominio de número entero, si \ (A = Q \ cdot B \) , entonces \ (B \) divisible \ (A \) , denotado \ (a | b \)
  • propiedad
    • Si \ (A | b, \ b | c \) , entonces \ (a | c \)
    • Si \ (c | a_ {i} , \ i = 1, \ 2, \ .., \ n \) entonces \ (C \) también es divisible \ (a_ {i} \) combinación lineal

Los números primos, el número de casos

  • Definido números primos
    excepto \ (1 \) y en sí, el número de ningún factor, llamado el número primo, también conocido como números primos, los otros números se denominan compuesto.
  • \ (2 \) es el número primo más pequeño

Distintiva de los números primos

  • Un teorema
    de número compuesto \ (n \) , no debe ser no más de \ (\ sqrt {n} \ ) factores primos.

    Set \ (n- = PQ \) , a condición de \ (P \) es el factor mínimo, el \ (p \ leq q \)
    entonces \ (n = pq \ geq p
    ^ {2} \) tan \ (p \ leq \ sqrt {n} \)
    se asume \ (P \) es un número compuesto, la descomposición puede proceder con el conjunto de títulos de no coincide, por lo que \ (P \) es un número primo.

  • Teorema de inferencia
    para un número \ (n- \) , no más que si no está presente \ (\ sqrt {n} \ ) factores primos, entonces es un número primo.
  • La determinación de ordinario primer
    empadronador \ (2- \ sqrt {n} \) números primos, si está presente (n- \) \ factor de, a continuación, la \ (n- \) es un número primo, de lo contrario es un número compuesto.

tamiz

método de criba se utiliza para encontrar \ (2-n \) en todos los números primos dentro.

pantalla de estilo egipcio

  • Algoritmo pensar
    que asumir que todos los números son primos.
    Por Número \ (X \) , si es un número primo, la totalidad de la pantalla a un múltiplo, y la marca es un número compuesto, y si es un número compuesto, entonces no hay cambio.

  • algoritmo de optimización

    • Para primer \ (x \) , a partir de \ (x \) veces comienzan a enumerar . Debido a que el pliegue \ (X * Y, \ Y <X \) , ha determinado que \ (y \) pantallas el tiempo.
      Por ejemplo, \ (35 = 5 * 7 \) , se determina prime \ (5 \) tamiz cuándo ir una vez prime determinado \ (7 \) cuando la lata de la directa \ (49 = 7 * 7 \) tamiz aperturas.
    • \ (N- \) números primos dentro juzga que \ (\ sqrt {n} \ ) puede.
  • complejidad del tiempo es \ (O (nlglgn) \)

  • \(código\)

    int n, vis[N];
    void getPrime()
    {
        for(int i = 2; i <= n; ++i) vis[i] = 1;
        for(int i = 2; i * i <= n; ++i){
            if(vis[i]){
                for(int j = i * i; j <= n; j += i)
                    vis[j] = 0;
            }
        }
    }
    

pantalla de Euler

  • La situación de la pantalla de estilo egipcio y mejorar
    algunos número compuesto se proyectará a los tiempos, por ejemplo \ (7 * 9 = 63 = 3 * 21 \) .

  • Optimizada
    de modo que cada acoplamiento es sólo el número mínimo de factores primos a la pantalla de nuevo, la complejidad puede ser controlado para \ (O (n) \)

  • detalle

    • Por defecto, todos los primeros números son números primos, considerados en el ciclo siguiente.
    • Si el número actual es un número primo, toda la totalidad de su pantalla para múltiples factores, que asegura que el número compuesto es el factor primordial mínima para la pantalla.
    • Si el número actual es un número compuesto, la pantalla para que múltiples prime \ (X \) , si el \ (X \) divisible corriente de bucle número compuesto se sale, como el ciclo continúa para dar nuevos múltiplos pueden después de ser \ (X \ ) divisible.
  • \(código\)

    int n, prime[N], vis[N];
    int Euler_sieve()
    {
        int cnt = 0;//length of prime table
        for(int i = 2; i <= n; ++i)
            vis[i] = 1;
        for(int i = 2; i <= n; ++i){
            if(vis[i]) prime[++cnt] = i;
            for(int j = 1; j <= cnt && prime[j] * i <= n; ++j){
                vis[prime[j] * i] = 0;
                if(i % prime[j] == 0) break;
            }
        }
        return cnt;
    }
    

la conversión hexadecimal

Considere \ (K \) de la banda, a continuación, un dígito \ (dígitos para \) oscila \ ([0, \ k) \)

  • Para la conversión decimal
    para un (n- \) \ bit \ (K \) nary, a saber, en un número decimal

\ [\ Sum_ {i = 0} ^ {n - 1} a_ {i} k ^ {i} = a_ {n - 1} k ^ {n - 1} + a_ {n - 2} k ^ {n - 2} + \ ... \ + a_ {0} \]

  • Convertido al número decimal \ (K \) banda
    primer modo \ (K \) obtenido en el bajo \ (K \) valor en binario, entonces además de \ (K \) redondeo baja.

    //k 进制的字符串向十进制转换
    int num = 0;
    for(int i = 0; i < s.length(); ++i)
        num *= 10, num += s[i] - '0';
    
    //十进制转换为 k 进制
    stack<int> sta;
    while(num) {
        sta.push(num % k);
        num /= k;
    }
    while(!sta.empty())
        cout<<sta.top()<<endl, sta.pop();
    

El máximo común divisor y el mínimo común múltiplo

  • Tanto la definición de
    la palabra a su nombre. El primero es el mayor factor común, que es el mínimo común múltiplo.

  • relaciones

    \ [[A, \ b] = \ frac {ab} {(a, \ b)} \]

    \ [[A_ {0}, \ a_ {1}, \ ... \, a_ {n}] = \ frac {\ prod_ {i = 0} ^ {n} a_ {i}} {(A_ {0 }, \ a_ {1}, \ ... \, a_ {n})} \]

    Al probar \ ((\ frac {A} {(A, \ B)}, \ \ frac {B} {(A, \ B)}) =. 1 \) , y \ ((a, \ b) = 1 , \ [a, \ b] = ab \) pueden ser mostrados en la fórmula.

algoritmo de Euclides

algoritmo de Euclides es el cálculo máximo común divisor euclidiana.

  • Teorema \ (. 1 \)
    \ (A = B + C CDOT Q \ \) en, \ ((A, \ B) = (B, \ C) \)

    Set \ ((a, \ b)
    = d_ {1}, \ (b, \ c) = d_ {2} \) entonces \ (d_ {1} | a , \ d_ {1} | b, \ d_ { } 1 |. C \) , por lo que \ (d_ {1} \ leq
    D_ {2} \) Del mismo modo \ (d_ {2} | b , \ d_ {2} | c, \ d_ {2} | a \) Por lo tanto \ (d_ {2} \ leq
    D_ {1} \) tan \ (d_ {1} = d_ {2} \)

  • Teorema \ (2 \)
    \ ((A, \ 0) = A \)

    \ (A \) es \ (A \) máximo factor de \ (A \) es \ (0 \) factor, \ ((a, \ 0) = a \)

  • algoritmo de Euclides
    conjunto \ (0} = R_ {A, \ R_ {} = B. 1, \ + R_ {n-0. 1} = \) , la siguiente ecuación

    \ [R_ {0} = r_ {1} Q_ {1} + r_ {2} \\ r_ {1} = r_ {2} Q_ {2} + r_ {3} \\ ... \\ r_ {i - 1} = r_ {i} Q_ {i} + r_ {i + 1} \\ \\ ... r_ {n - 1} = r_ {n} Q_ {n} + r_ {n + 1} \]

    De acuerdo con el teorema \ (1 \) y el teorema \ (2 \) y, después de la división será capaz de obtener el máximo común divisor

la identidad de Bézout

  • \ (S \ cdot a + t \ cdot b = (a, \ b) \)
  • Guess \ (R_ {I} = S_ {I} T_ {A + B} I, \ i \ in [0, \ n-] \) , utilizando la inducción matemática para demostrar esta conjetura.

Ampliar el algoritmo de Euclides

Buscando \ ((a, \ b) \) determinan simultáneamente \ (s \ cdot a + t \ cdot b = (a, \ b) \) es una solución particular \ (S_ {0}, \ t_ {0 } \)

  • algoritmo recursivo
    considerada ha sido demostrada por la conjetura de inducción matemática

    \ [R_ {i} = s_ {i} a + t_ {i} b, \ i \ in [0, \ n] \]

    simultáneo

    \ [R_ {i} = r_ {i - 2} - Q_ {i - 1} r_ {i - 1} \]

    Get recursiva

    \ [S_ {i} = s_ {i - 2} - s_ {i - 1} Q_ {i - 1} \]

    \ [T_ {i} = t_ {i - 2} - t_ {i - 1} Q_ {i - 1} \]

    En donde, \ (I \) de \ (2 \) empieza a contar, es decir, \ (i \ in [2, \ n] \)

    \ [Q_ {i} = \ left [\ frac {r_ {i - 1}} {r_ {i}} \ right] \]

    \ [R_ {i} = r_ {i - 1} \ mod \ r_ {i} = r_ {i - 1} - Q_ {i} r_ {i} \]

    En donde, \ (I \) de \ (1 \) empieza a contar, es decir, \ (i \ in [1, \ n - 1] \)

    Considere el valor inicial, es fácil llegar

    \ [S_ {0} = 1, \ s_ {1} = 0 \]

    \ [T_ {0} = 0, \ t_ {1} = 1 \]

    \ [R_ {0} = a, \ r_ {1} = b \]

    \ [Q_ {1} = \ left [\ frac {a} {b} \ right] \]

    Así manera recursiva, puede obtener la solución final especial.

    Considere la optimización del espacio, sólo puede \ (s_ {0}, \ s_ {1}, \ t_ {0}, \ t_ {1}, \ r_ {0}, \ r_ {1}, \ Q_ {0} \ ) varias variables para recursión, cuando se introduce en la necesidad de asignación para guardar el valor de la variable intermedia, la complejidad espacial final es una constante.

    int s0, s1, s2, t0, t1, t2, r0, r1, r2, q1, cnt;
    pair<int, int> exgcd(int a, int b)
    {
        s0 = 1, s1 = 0, t0 = 0, t1 = 1;
        r0 = b, r1 = a % b, q1 = a / b;
        while(r1) {
            s2 = s1, s1 = s0 - s1 * q1, s0 = s2;
            t2 = t1, t1 = t0 - t1 * q1, t0 = t2;
            q1 = r0 / r1;
            r2 = r1, r1 = r0 - q1 * r1, r0 = r2;
        }
        return pair<int, int> {s1, t1};
    }
    
  • algoritmo recursivo
    considerando extremo recursiva con \ (B = 0, \ (A, \ B) = A \) , por lo que \ (s = 1, t =
    0 \) considerado ha determinado la \ ((b, \ a \ % b) \) en el caso donde \ (X '\ Y' \) , de nuevo a resolver \ ((a, b \) \) bajo \ (x, \ y \)
    de

    \ [Bx '+ (a - \ left \ lfloor \ frac {a} {b} \ right \ rfloor b) y' = ax + by \]

    resuelto

    \ [X = y '\ y = x' - \ left \ lfloor \ frac {a} {b} \ right \ rfloor y' \]

    Por lo tanto toda la parte trasera manera, es posible obtener un conjunto de soluciones especializadas \ (x_ {0}, \ y_ {0} \)

  • \(código\)

    int exgcd(int a, int b, int &x, int &y)
    {
        if(!b) {x = 1, y = 0; return a;}
        int r = exgcd(b, a % b, y, x);//y的值被修改为x',x的值被修改为y'
        y -= (a / b) * x;
        return r;
    }
    

El teorema fundamental de la aritmética

  • Teorema fundamental de la aritmética
    Para cualquier más grande que \ (1 \) número entero \ (n- \) , que se puede dividir en factores primos del producto en forma de potencia, llamado \ (n- \) factorización estándar:

    \ [N = \ prod_ {i = 1} ^ {k} P_ {i} ^ {\ alpha_ {i}} \]

    En donde, \ (P_ {I} \) es un número primo.
  • El número de factores
    conocidos por el principio de la multiplicación, \ (n- \) número es un factor

    \ [N = \ prod_ {i = 1} ^ {k} (1 + \ alpha_ {i}) \]

Supongo que te gusta

Origin www.cnblogs.com/ChenyangXu/p/12571937.html
Recomendado
Clasificación