Artículos con tag 'aritmética de composición'

El módulo aritmético

La "forma" es una de las aritmentiche disponible en prácticamente todos los lenguajes de programación (He usado la primera vez con el Commodore Basic 64) . Pueden aparecer como un operador simple, como en el caso de Actionscript o Javascript que ambos utilizan el carácter "por ciento" (a% b), o como un método o instrucción. Para los desarrolladores pueden ser útiles en contextos aparentemente diferentes. Gskinner habló hace poco tiempo, mostrando algunos ejemplos clásicos pero interesante.

Más simplemente, la acción se forman entre dos números devuelve el resto de su división. Para completar, se dice que el funcionamiento del módulo es un tema muy amplio, también he tratado en el cifrado RSA ! Esta vez, sin embargo, no vamos a hablar de los códigos o sistemas de cifrado, pero las cosas útiles y mucho más fácil.

Divisible por la alternancia ...

El primer uso podemos hacer que el funcionamiento del módulo es para determinar si un número es un número divisible por b! Si el risultatto de un% b (% voy a utilizar aquí la notación para indicar la operación del módulo) es cero, lo que es divisible por b. Recuerdo cuando tuve que lidiar con un problema similar que no sabía de la operación del módulo. En el Commodore 64 que necesitaba saber si un número es divisible por 2. A la vez que utiliza esta sintaxis (He encontrado el código origionale - 1983):

1
2
3
10 INPUT A
12 B = A / 2: Si B = INT (B) A continuación, imprima "Aceptar el número" A "Y" EVEN ": GOTO 10
14 PRINT "el número" A "Y" ODD ": GOTO 10

BASIC de Commodore 64, sin embargo, no posee la operación de módulo - al menos que yo recuerde!

En la práctica que estaba haciendo exactamente lo que por su propia naturaleza hace que la tarea del módulo: verificavo que la división por 2 no tuvo descanso, en este caso verificavo que el resultado no contenía un decimal ( IF B = INT(B) )! Si la operación de división es igual a su número entero, entonces el número es impar!

Si a tener nuestro valor para ser monitoreado, lo mismo puede ser resuelto a través de:

1
2
3
a % 2 ) == 0 ) { if ((en% 2) == 0) {
/ / Par
}

O, por 3, por:

1
2
3
a % 3 ) == 0 ) { if ((un 3%) == 0) {
/ / Divisibilidad por 3
}

Pequeña nota: gracias a la pista si tiene que ver con las potencias de 2 él, incluso hay una manera más rápida para comprobar si un número es par o impar. En la notación binaria, de hecho, todos los números pares tienen el primer bit a cero! Por lo tanto, el uso de los operadores lógicos, es posible saber si un número par o impar y simplemente "testanto" el primer bit:

1
2
3
! ( a & 1 ) ) { if ((a & 1)) {
/ / Par
}

En la Asamblea, por ejemplo, este es el pan de cada día! Es aún más inmediata y simple (el Motorola 68020, por ejemplo, tenía una instrucción BTST que el "encabezado" un solo bit ;) ). – moltiplicazione bit a bit) tra il nostro valore a e 1 (chiamato maschera ). ! Las operaciones lógicas (AND, OR, NOT, XOR, etc ...), de hecho, son conocidos por ser más rápido a nivel y luego eseguzione de "máquina del tiempo" (a & 1) realiza la operación lógica AND ( & - multiplicación bits) entre el valor a y 1 (denominada máscara). Si a = 7 (00000111), por ejemplo:

1
2
3
00000111 Y
00000001 =
00000001; impar

Si a = 8:

1
2
3
00001000 Y
00000001 =
00000000, la igualdad

No sólo podemos comprobar los números, es decir, con el primer bit se establece en 0, y por tanto divisible por 2, pero también podemos comprobar si un número es divisible por 4, 8, 16, 32, 64, etc ... utilizando las máscaras apropiadas:

1
2
3
! ( a & 3 ) ) { if ((a & 3)) {
/ / Divisible por 4 (mask = 00000011 = 3), ya que 4 es 00000100)
}

Si los dos últimos bits son cero el número es divisible por 4! Si los últimos 3 bits (máscara 00000111) son cero el número es divisible por 8! Etcétera :)

Gskinner muestra el uso del módulo en el caso de la generación de los valores alterna. Un ejemplo clásico es cambiar el fondo de una lista de elementos:. Una línea blanca y gris Gskinner propone:

1
2
3
4
5
rowIndex % 2 == 0 ) { if (rowIndex% 2 == 0) {
rowColor = 0xFFFFFF;
{ Else {}
rowColor = 0xCCCCCC;
}

En primer lugar, el código anterior se puede resolver con una única línea de código:

1
2 == 0 ) ? 0xFFFFFF : 0xCCCCCC ; rowColor = (rowIndex% 2 == 0) 0xFFFFFF: 0xCCCCCC;?

Por otra parte, en este caso específico, se evitaría en realidad llevar a cabo una operación de módulo "pesada". Esta situación particular es a menudo participan en un bucle, por lo que sería "bueno" no desperdiciar ciclos de reloj de la máquina. En estos casos, me gusta el limpiador (y lógico) Solución:

1
fooIndex == false ) ) ? 0xFFFFFF : 0xCCCCCC ; rowColor = (fooIndex = (fooIndex == false)) 0xFFFFFF: 0xCCCCCC;

o false , a seconda di come vogliamo impostare inizialmente il nostro colore sfondo. Cuando se fooIndex valor precedentemete se establece en true o false , dependiendo de cómo nos propusimos inicialmente nuestro color de fondo. Este enfoque es más sutil y menos inmediata, a primera vista, pero más rápido, ya que realiza operaciones lógicas y de verdadero / falso. la condizione (fooIndex == false) sarà falsa e di conseguenza fooIndex verrà impostato da true a false. Si fooIndex es cierto, cuando se ejecuta la sentencia (fooIndex = (fooIndex == false) ) la condición (fooIndex == false) es falso y por lo tanto fooIndex se establecerá de true a false. verrà impostato da false a true! La segunda vez, sin embargo, la condición (fooIndex == false) será verdadera y fooIndex se establecerá de false a true! Y así sucesivamente ...

Repeticiones: el comportamiento que hay que vigilar

La aritmética finita, que es la base de la operación de la operación del módulo, se hace referencia a menudo como aritmética del reloj. Un reloj clásico con las manos tiene un dial dividido en 12 horas (12 días 12 noche más!), Suficiente para indicar una cualquiera de las 24 horas en un día. A las 08:00 am Si yo le preguntara ahora marca su reloj dentro de 18 horas, su respuesta sería 8 +18 = 26! 02:00 Pero por la noche! Involuntariamente, y tal vez sin saberlo, lo hacemos módulo de operaciones conitnuamente cuando nos ocupamos de los tiempos.

En Italia estamos acostumbrados al sistema durante 24 horas (o mixto). Cuando nos dispusimos a 16:00 quell'orario quiere decir que en otros países se conoce como las 4:00 pm. ¿Quién usa el sufijo AM / PM de distinguir de los hora nocturna DIUNE, incluso más a menudo realiza la operación del módulo, en este caso módulo de 12! Los italianos, entre otros, sin embargo, está acostumbrado a considerar las 24 horas, realizamos operaciones con Forma 24!

Cuando son las 11 am (11:00 para todos) y pensar "5 horas", respondemos italiano 5 +11 = 16 (cuatro de la tarde), un extranjero podría también responder 5 11 = 16:00. Desde 5 + 11 aritmética clásica, es, obviamente, el 16, al igual que la respuesta ajena a 16:00? Él sólo tiene que ejecutar el módulo 12 en el resultado: 5 + 11 = 16 mod 12 = 4. No es necesario que se tome una calculadora para verificar la exactitud de los cálculos, pero ¿cómo se procede todo un poco ", aparece una esfera de un reloj y coloque las manos sobre el 11 mental, añadir entonces - también visualmente - 5 horas, como por arte de magia, se encontrará realmente en el 4! Es por eso que se llaman las cuatro de la tarde del 16 :)

En Italia, sin embargo, se utiliza un módulo de 24, de hecho: 11 +5 = 16 mod 24 = 16. Cuando estoy a 23:00 pm, cinco horas después de la 28:00 no será, porque 28 módulo 12 = 4! 122514884225 módulo 24 = 17! Lo que pasa es que la figura de la forma número 24 nunca excede 24. Pero lo más interesante es que los números se repiten indefinidamente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
% 1 24 = 1
2% 24 = 2
3 = 24% 3
...
22% 24 = 22
23% 24 = 23
24% 24 = 0
25% 24 = 1
26% 24 = 2
27% 24 = 3
...
48% 24 = 0
49% 24 = 1
50% 24 = 2
51% 24 = 3
...

Esta repetición es una facilidad desarmante. Imagínese, por ejemplo, de tener que tener un objeto, un clip de película, de manera similar a un tablero de ajedrez, en cuatro columnas. Cree una plaza MovieClip NE, 55 × 55 píxeles y las propiedades esportiamolo panel con el nombre de Simbolo . El siguiente código tendrá nuestra MovieClip en cuatro columnas e ir "cabeza" a través de la operación del módulo:

1
2
3
4
5
6
7
Number = 4 ; var col: Número = 4;
var i= 0 ; i < 12 ; i ++ ) { for (var i = 0; i <12; i + +) {
Sprite = new Simbolo ( ) ; var s: Sprite = new Shape ();
s ) ; addChild (s);
= ( i % col ) * 60 ; s x = (i% col) * 60.;
= Math . floor ( i / col ) * 60 ; s y =. Matemáticas piso (i / col) * 60.;
}

cresce in modo indefinito. Como se puede ver en el código, la variable i ciclo for crecimiento indefinidamente. Pero la coordenada x de nuestra MovieClip nunca supera un cierto valor, y se repite indefinidamente! Aquí está un ejemplo concreto:

Loading ... Flash Player

A través de los dos botones se puede variar el número de columnas (la forma) y el número total de elementos, utilizando el algoritmo anterior.

Continuación ...

As3Crypto ActionScript 3 Biblioteca Criptografía

AS3 Crypto Framework 1.1 es una librería escrita en ActionScript 3 que le permite aplicar los algoritmos de cifrado más comunes, tales como:

  • Clave pública de cifrado: RSA (sólo cifrado partial..)
  • Secreto clave de cifrado: AES, DES, 3DES, Blowfish XTEA, RC4
  • Modos de confidencialidad: ECB, CBC, CFB, CFB8, OFB, CTR
  • Algoritmos de hash: MD5, SHA-1, SHA-224, SHA-256
  • Juntas disponibles: PKCS # 5, PKCS # 1
  • Otras Cosas útil: HMAC, Random

La biblioteca proporciona un número de clases con el fin de aplicar el cifrado algoritmos. Es dado en la licencia BSD, como parte del código fuente viene de Java, C y Javascript. En el sitio se puede encontrar más información, fuente o binario.

Continuación ...

Cifrado RSA

En primer lugar, como se ha mencionado en el mensaje cifrado sistema RSA es un cifrado de clave pública, y explota las propiedades de los números primos. Además, la aritmética utilizada (en los cálculos) no es lo normal, pero la llamada finito o artirmetica modular. Comience la derecha de este último proceder paso a paso en la creación de un cifrado RSA.

Continuación ...