Función \(\varphi\) de Euler#
Introducción#
En este capítulo exploraremos la función phi de Euler, la cual nos indica cuántos números menores que un entero positivo \(n\) son primos relativos con éste. Recordemos que la definición de números primos relativos la discutimos en la sección del máximo común divisor (Definición 9). Observaremos que esta función puede calcularse de manera laboriosa y tediosa, es decir, manualmente y realizando cálculos, pero también desarrollaremos una fórmula que simplifica este proceso. Además, exploraremos algunas aplicaciones y propiedades de esta función.
Primos relativos menores a un entero dado.#
Recordemos que vimos la definición de cuándo dos números son primos relativos (Definición 9). Ahora, nos interesa buscar a los primos relativos con un número \(n\), tales que sean menores a \(n\) y positivos. Los siguientes dos ejemplos nos ilustraran la idea de lo que estamos buscando.
Ejemplo 53
Calculemos para qué valores de \(i\), donde \(1\le i\le 13\), se cumple que \((13,i) = 1\) y para qué valores de \(j\), donde \(1\le j\le 24\), se cumple que \((24,j) = 1\).
Solución.
Notemos que como \(13\) es un número primo, solo tiene como divisores a \(1\) y a \(13\). Entonces, para cualquier número positivo y menor a \(13\) tendríamos que \((13,i)=1\).
Por lo tanto, para \(i = 1,2,3,4,5,6,7,8,9,10,11,12\), se cumple que \((13,i) = 1\).
Ahora, busquemos los primos relativos con \(24\). Tendríamos lo siguiente:
Por lo tanto, para \(j = 1,5,7,11,13,17,19,23\), se cumple que \((24,j) = 1\).
Definición de la función \(\varphi\) de Euler#
Definición 21 (Función de Euler)
Sea \(n\) un entero positivo. La función de Euler \(\varphi(n)\) denota el número de enteros positivos menores o iguales que \(n\) y que además son primos relativos con \(n\).
Ejemplo 54
Veamos los primeros \(10\) valores de la función \(\varphi(n)\):
Fórmula para la función \(\varphi\) de Euler#
Teniendo en mente el Ejemplo 53, podemos notar lo tardado que sería calcular los primos relativos a un número \(n\) que sean menores que \(n\), cuando \(n\) es demasiado grande. En esta sección vamos a desarrollar una fórmula que nos ayudará a hacer este cálculo más sencillo.
Primero veamos \(\varphi(n)\) cuando \(n\) es un número primo.
Lema 7
Si \(p\) es un número primo, entonces \(\varphi(p) = p-1\).
Demostración. Sea \(p\) un número primo.
Sabemos que los divisores de \(p\) son \(\{1,p\}\) y que los enteros positivos menores a \(p\) son \(\{1,2,\ldots,p-2,p-1\}\).
Entonces para cualquier entero positivo \(n\) menor que \(p\), se cumple que \((n,p) = 1\), es decir que \(p\) es primo relativo con cualquiera de estos números.
Por lo tanto concluimos que \(\varphi(p) = p-1\).\(\square\)
A continuación veremos cómo se comporta la función \(\varphi(n)\) cuando \(n = p^a\), donde \(a\) es un entero positivo. Para la demostración del siguiente teorema veamos un ejercicio previo.
Ejemplo 55
Calcula \(\varphi(16)\).
Solución.
Notemos que \(16 = 2^4\).
Denotemos como \(A\) al conjunto de los números positivos menores o iguales que \(16\), es decir:
Notemos que la cardinalidad del conjunto \(A\) es \(16 = 2^4\).
Por otro lado, denotemos como \(B\) al conjunto de los números positivos menores o iguales que \(16\) que NO son primos relativos con \(16\). Como \(16 = 2^4\), entonces los números que NO son primos relativos con \(16\) serían los números que son múltiplos de \(2\), es decir:
Notemos que la cardinalidad del conjunto \(B\) es \(8 = 2^3\).
Ahora, tendríamos lo siguiente:
Así, tenemos que hay \(8\) números que son primos relativos con \(16\).
Teorema 18
Sea \(p\) un número primo y \(a\) un entero positivo. Entonces \(\varphi(p^a) = p^a - p^{a-1} = p^a \left( 1- \frac{1}{p} \right)\).
Demostración. Sean
Entonces,
Notemos que la cardinalidad del conjunto \(A = \{1,2,3,\ldots,p^a-2,p^a-1,p^a\}\) es, \(|A| = p^a\).
Luego notemos que como \(p^a\) es potencia de un primo, si tomamos un valor \(n\) tal que \(1\le n \le p^a\), entonces \((n,p^a)>1\) si y solo si \(n\) es múltiplo de \(p\).
Los múltiplos enteros de \(p\) en el intervalo \([ 1,p^a]\) son \(p,2p,3p,\ldots,(p^{a-1})p\) y estos en total son \(p^{a-1}\), por lo tanto la cardinalidad del conjunto \(B = \{p,2p,3p,\ldots,(p^{a-1})p \}\) es \(|B| = p^{a-1}\).
Por lo tanto tenemos que:
Ejemplo 56
Calcula cuántos números positivos menores a \(81\) son primos relativos con \(81\) utilizando la fórmula para la función \(\varphi(n)\).
Solución.
Sabemos que \(81=3^4\), entonces:
Antes de proceder con el siguiente teorema, veamos una proposición que nos será de mucha ayuda en la demostración del caso general para la función \(\varphi(n)\).
Proposición 18
Sea \(m\) un número entero. Si \(m\) es primo relativo con un entero \(n\), en donde \(1 < n <m\), entonces \(m\) es primo relativo con \(m + n\).
Demostración. Supongamos que \((m,m+n) = d\), queremos demostrar que \(d=1\).
Notemos que, como \(d|m\) y \(d|(m+n)\), entonces \(d|(m+n) - m = n\).
Por lo tanto obtenemos que \(d|n\) y \(d|m\), pero como \(n\) y \(m\) son primos relativos, sabemos que \((m,n) = 1\), por lo tanto \(d = 1\).
Así, concluimos que \(m\) es primo relativo con \(m+n. \square\)
La Proposición 18 nos ayuda a ver que si tomamos un entero \(m\) y nos fijamos en el intervalo \([0,m]\), si en el intervalo hay \(k\) números que son primos relativos con \(m\), entonces en el intervalo \([m+1,2m]\) también habrá \(k\) números que son primos relativos con \(m\).
Ejemplo de inducción para la demostración del caso general de la función \(\varphi\)#
Lo que vamos a demostrar en la siguiente sección es la fórmula para el caso general de la función \(\varphi(n)\) de Euler, es decir, que para un entero positivo \(n\) con descomposición canónica \(n = p_1^{\alpha_1}p_2^{\alpha_2} \cdot \ldots \cdot p_k^{\alpha_k}\), se cumple que
Para la demostración de la fórmula vamos a proceder por inducción. Antes de pasar a la demostración, presentaremos un ejemplo particular para comprender la idea de la inducción que realizaremos. En este ejemplo, vamos a ver que podemos calcular el valor de \(\varphi(2^3\cdot 3\cdot 5^2)\) suponiendo que ya demostramos que la fórmula es válida para
También, vamos a apoyarnos con códigos de Python para observar con mas detalle los intervalos de los cuales vamos a hablar.
Ejemplo 57
Supongamos que la fórmula de la función \(\varphi\) de Euler es válida para:
Con lo anterior, calcula el valor de \(\varphi(n)\) para \(n = 600 = 2^3\cdot 3\cdot 5^2\).
Solución.
La idea para encontrar éste valor es la siguiente.
Primero, vamos a buscar los números que son múltiplos de \(2\) o \(3\) en el intervalo \([1,600]\). Para ello, vamos a formar intervalos de tamaño \(2^3\cdot 3\).
Por la suposición inicial, sabemos que en el intervalo \([1,2^3\cdot 3]\) hay
Ahora, vamos a seguir tomando intervalos de tamaño \(2^3\cdot 3\) hasta que cubramos el intervalo \([1,600]\) con éstos. Entonces tendríamos los intervalos
En total tenemos \(5^2\) intervalos. Por la Proposición 18, tenemos que cada uno de ellos tiene la misma cantidad de números que son múltiplos de \(2\) o \(3\). Por lo tanto, tenemos que en el intervalo \([1,600]\) hay
De manera similar, vamos a obtener los números que son múltiplos de \(5\) en el intervalo \([1,600]\). Vamos a formar intervalos de tamaño \([1,5^2]\), por el Teorema 18 sabemos que hay
Ahora, seguiremos formando intervalos de tamaño \(5^2\) hasta que cubramos el intervalo \([1,600]\) con éstos. Entonces, tendríamos los intervalos
En total hay \(2^3\cdot 3\) intervalos. Nuevamente por la Proposición 18, tenemos en cada uno de los intervalos la misma cantidad de números que son múltiplos de \(5\). Por lo tanto, tenemos que en el intervalo \([1,600]\) hay
Por último, tenemos que buscar los números que encuentran en la intersección, es decir, los números que son múltiplos de \(2\) y \(5\) o de \(3\) y \(5\). Necesitamos restar estos números para evitar contar dos veces el mismo número.
Vamos a fijarnos en los números que son múltiplos de \(2\) o \(3\) en el intervalo \([1,120]\). Entre éstos, la \(\frac{1}{5}\) parte son múltiplos de \(5\).
Pero esto, también se cumple en los siguientes \(4\) intervalos \([121,240]\),\([241,360]\),\([361,480]\) y \([481,600]\) (en la Observación 10 se encuentran los intervalos). De está manera, si multiplicamos por \(\frac{1}{5}\) la cantidad de números que son divisibles entre \(2\) o \(3\) en el intervalo \([1,600]\), obtendríamos los números que son divisibles entre \(2\) y \(5\) o \(3\) y \(5\). Por lo tanto, la cantidad de números repetidos que tenemos que restar es
Finalmente tenemos lo siguiente
Aquí están los códigos que utilizamos para el Ejemplo 57.
Usaremos la función que construimos en la sección del algoritmo de Euclides para calcular el máximo común divisor. También, la función que creamos en el capítulo del teorema fundamental de la aritmética para encontrar los primos involucrados en la factorización de un entero.
def algoritmo_euclides(a,b):
while (a % b) != 0:
a_1, b_1 = a, b
a = b_1
b = a_1 % b_1
return b
def factorizar_en_primos(n):
lst = []
for i in range(2, n+1):
while n % i == 0:
lst.append(i)
n //= i
if n == 1:
break
return lst
El siguiente código nos ayuda a generar los intervalos que se mencionan en el Ejemplo 57. El argumento «opcion» define el comportamiento de la función. Acepta únicamente los valores “relativos”, “multiplos” o “interseccion”. Cada uno de estos valores indica un caso específico para ejecutar la lógica.»
def prel_mult_int(numero, intervalos, opcion):
for i in range(1,intervalos+1):
int_1 = i*numero - numero +1
int_2 = i*numero
if opcion == "prelativos":
primos_relativos = [x for x in range(int_1,int_2+1) if algoritmo_euclides(numero,x) == 1]
print(f"En el intervalo [{int_1},{int_2}] hay {len(primos_relativos)} primos relativos con {numero} y son: ")
print(primos_relativos)
elif opcion == "multiplos":
primos = set(factorizar_en_primos(numero))
multiplos = [x for x in range(int_1,int_2+1) if any(x % d == 0 for d in primos)]
print(f"En el intervalo [{int_1},{int_2}] hay {len(multiplos)} números que son múltiplos de {primos} y son: ")
print(f"{i}: {multiplos}")
elif opcion == "interseccion":
interseccion = [x for x in range(int_1,int_2+1) if (x%2 == 0 and x%5 == 0) or (x%3 == 0 and x%5 == 0)]
print(f"En el intervalo [{int_1},{int_2}] hay {len(interseccion)} números que son múltiplos de 2 y 5 o 3 y 5: ")
print(f"{i}: {interseccion}")
else:
print("Opción no válida. Ingresa como tercer argumento: 'prelativos', 'multiplos' o 'interseccion'.")
Con la siguiente ejecución del código obtenemos los números que son primos relativos con \(600\) en el intervalo \([1,600]\).
prel_mult_int(2**3 * 3 * 5**2, 1, "prelativos")
En el intervalo [1,600] hay 160 primos relativos con 600 y son:
[1, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 49, 53, 59, 61, 67, 71, 73, 77, 79, 83, 89, 91, 97, 101, 103, 107, 109, 113, 119, 121, 127, 131, 133, 137, 139, 143, 149, 151, 157, 161, 163, 167, 169, 173, 179, 181, 187, 191, 193, 197, 199, 203, 209, 211, 217, 221, 223, 227, 229, 233, 239, 241, 247, 251, 253, 257, 259, 263, 269, 271, 277, 281, 283, 287, 289, 293, 299, 301, 307, 311, 313, 317, 319, 323, 329, 331, 337, 341, 343, 347, 349, 353, 359, 361, 367, 371, 373, 377, 379, 383, 389, 391, 397, 401, 403, 407, 409, 413, 419, 421, 427, 431, 433, 437, 439, 443, 449, 451, 457, 461, 463, 467, 469, 473, 479, 481, 487, 491, 493, 497, 499, 503, 509, 511, 517, 521, 523, 527, 529, 533, 539, 541, 547, 551, 553, 557, 559, 563, 569, 571, 577, 581, 583, 587, 589, 593, 599]
Observación 8
Con la siguiente ejecución de código obtenemos los \(5^2\) intervalos de tamaño \(2^3\cdot 3\) que tienen números que son múltiplos de \(2\) y \(3\).
prel_mult_int(2**3 * 3, 5**2, "multiplos")
En el intervalo [1,24] hay 16 números que son múltiplos de {2, 3} y son:
1: [2, 3, 4, 6, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 22, 24]
En el intervalo [25,48] hay 16 números que son múltiplos de {2, 3} y son:
2: [26, 27, 28, 30, 32, 33, 34, 36, 38, 39, 40, 42, 44, 45, 46, 48]
En el intervalo [49,72] hay 16 números que son múltiplos de {2, 3} y son:
3: [50, 51, 52, 54, 56, 57, 58, 60, 62, 63, 64, 66, 68, 69, 70, 72]
En el intervalo [73,96] hay 16 números que son múltiplos de {2, 3} y son:
4: [74, 75, 76, 78, 80, 81, 82, 84, 86, 87, 88, 90, 92, 93, 94, 96]
En el intervalo [97,120] hay 16 números que son múltiplos de {2, 3} y son:
5: [98, 99, 100, 102, 104, 105, 106, 108, 110, 111, 112, 114, 116, 117, 118, 120]
En el intervalo [121,144] hay 16 números que son múltiplos de {2, 3} y son:
6: [122, 123, 124, 126, 128, 129, 130, 132, 134, 135, 136, 138, 140, 141, 142, 144]
En el intervalo [145,168] hay 16 números que son múltiplos de {2, 3} y son:
7: [146, 147, 148, 150, 152, 153, 154, 156, 158, 159, 160, 162, 164, 165, 166, 168]
En el intervalo [169,192] hay 16 números que son múltiplos de {2, 3} y son:
8: [170, 171, 172, 174, 176, 177, 178, 180, 182, 183, 184, 186, 188, 189, 190, 192]
En el intervalo [193,216] hay 16 números que son múltiplos de {2, 3} y son:
9: [194, 195, 196, 198, 200, 201, 202, 204, 206, 207, 208, 210, 212, 213, 214, 216]
En el intervalo [217,240] hay 16 números que son múltiplos de {2, 3} y son:
10: [218, 219, 220, 222, 224, 225, 226, 228, 230, 231, 232, 234, 236, 237, 238, 240]
En el intervalo [241,264] hay 16 números que son múltiplos de {2, 3} y son:
11: [242, 243, 244, 246, 248, 249, 250, 252, 254, 255, 256, 258, 260, 261, 262, 264]
En el intervalo [265,288] hay 16 números que son múltiplos de {2, 3} y son:
12: [266, 267, 268, 270, 272, 273, 274, 276, 278, 279, 280, 282, 284, 285, 286, 288]
En el intervalo [289,312] hay 16 números que son múltiplos de {2, 3} y son:
13: [290, 291, 292, 294, 296, 297, 298, 300, 302, 303, 304, 306, 308, 309, 310, 312]
En el intervalo [313,336] hay 16 números que son múltiplos de {2, 3} y son:
14: [314, 315, 316, 318, 320, 321, 322, 324, 326, 327, 328, 330, 332, 333, 334, 336]
En el intervalo [337,360] hay 16 números que son múltiplos de {2, 3} y son:
15: [338, 339, 340, 342, 344, 345, 346, 348, 350, 351, 352, 354, 356, 357, 358, 360]
En el intervalo [361,384] hay 16 números que son múltiplos de {2, 3} y son:
16: [362, 363, 364, 366, 368, 369, 370, 372, 374, 375, 376, 378, 380, 381, 382, 384]
En el intervalo [385,408] hay 16 números que son múltiplos de {2, 3} y son:
17: [386, 387, 388, 390, 392, 393, 394, 396, 398, 399, 400, 402, 404, 405, 406, 408]
En el intervalo [409,432] hay 16 números que son múltiplos de {2, 3} y son:
18: [410, 411, 412, 414, 416, 417, 418, 420, 422, 423, 424, 426, 428, 429, 430, 432]
En el intervalo [433,456] hay 16 números que son múltiplos de {2, 3} y son:
19: [434, 435, 436, 438, 440, 441, 442, 444, 446, 447, 448, 450, 452, 453, 454, 456]
En el intervalo [457,480] hay 16 números que son múltiplos de {2, 3} y son:
20: [458, 459, 460, 462, 464, 465, 466, 468, 470, 471, 472, 474, 476, 477, 478, 480]
En el intervalo [481,504] hay 16 números que son múltiplos de {2, 3} y son:
21: [482, 483, 484, 486, 488, 489, 490, 492, 494, 495, 496, 498, 500, 501, 502, 504]
En el intervalo [505,528] hay 16 números que son múltiplos de {2, 3} y son:
22: [506, 507, 508, 510, 512, 513, 514, 516, 518, 519, 520, 522, 524, 525, 526, 528]
En el intervalo [529,552] hay 16 números que son múltiplos de {2, 3} y son:
23: [530, 531, 532, 534, 536, 537, 538, 540, 542, 543, 544, 546, 548, 549, 550, 552]
En el intervalo [553,576] hay 16 números que son múltiplos de {2, 3} y son:
24: [554, 555, 556, 558, 560, 561, 562, 564, 566, 567, 568, 570, 572, 573, 574, 576]
En el intervalo [577,600] hay 16 números que son múltiplos de {2, 3} y son:
25: [578, 579, 580, 582, 584, 585, 586, 588, 590, 591, 592, 594, 596, 597, 598, 600]
Observación 9
Con la siguiente ejecución de código obtenemos los \(2^3\cdot 3\) intervalos de tamaño \(5^2\) que tienen números que son múltiplos de \(5\).
prel_mult_int(5**2, 2**3 * 3, "multiplos")
En el intervalo [1,25] hay 5 números que son múltiplos de {5} y son:
1: [5, 10, 15, 20, 25]
En el intervalo [26,50] hay 5 números que son múltiplos de {5} y son:
2: [30, 35, 40, 45, 50]
En el intervalo [51,75] hay 5 números que son múltiplos de {5} y son:
3: [55, 60, 65, 70, 75]
En el intervalo [76,100] hay 5 números que son múltiplos de {5} y son:
4: [80, 85, 90, 95, 100]
En el intervalo [101,125] hay 5 números que son múltiplos de {5} y son:
5: [105, 110, 115, 120, 125]
En el intervalo [126,150] hay 5 números que son múltiplos de {5} y son:
6: [130, 135, 140, 145, 150]
En el intervalo [151,175] hay 5 números que son múltiplos de {5} y son:
7: [155, 160, 165, 170, 175]
En el intervalo [176,200] hay 5 números que son múltiplos de {5} y son:
8: [180, 185, 190, 195, 200]
En el intervalo [201,225] hay 5 números que son múltiplos de {5} y son:
9: [205, 210, 215, 220, 225]
En el intervalo [226,250] hay 5 números que son múltiplos de {5} y son:
10: [230, 235, 240, 245, 250]
En el intervalo [251,275] hay 5 números que son múltiplos de {5} y son:
11: [255, 260, 265, 270, 275]
En el intervalo [276,300] hay 5 números que son múltiplos de {5} y son:
12: [280, 285, 290, 295, 300]
En el intervalo [301,325] hay 5 números que son múltiplos de {5} y son:
13: [305, 310, 315, 320, 325]
En el intervalo [326,350] hay 5 números que son múltiplos de {5} y son:
14: [330, 335, 340, 345, 350]
En el intervalo [351,375] hay 5 números que son múltiplos de {5} y son:
15: [355, 360, 365, 370, 375]
En el intervalo [376,400] hay 5 números que son múltiplos de {5} y son:
16: [380, 385, 390, 395, 400]
En el intervalo [401,425] hay 5 números que son múltiplos de {5} y son:
17: [405, 410, 415, 420, 425]
En el intervalo [426,450] hay 5 números que son múltiplos de {5} y son:
18: [430, 435, 440, 445, 450]
En el intervalo [451,475] hay 5 números que son múltiplos de {5} y son:
19: [455, 460, 465, 470, 475]
En el intervalo [476,500] hay 5 números que son múltiplos de {5} y son:
20: [480, 485, 490, 495, 500]
En el intervalo [501,525] hay 5 números que son múltiplos de {5} y son:
21: [505, 510, 515, 520, 525]
En el intervalo [526,550] hay 5 números que son múltiplos de {5} y son:
22: [530, 535, 540, 545, 550]
En el intervalo [551,575] hay 5 números que son múltiplos de {5} y son:
23: [555, 560, 565, 570, 575]
En el intervalo [576,600] hay 5 números que son múltiplos de {5} y son:
24: [580, 585, 590, 595, 600]
Observación 10
Con la siguiente ejecución de código obtenemos los \(5\) intervalos de tamaño \(2^3\cdot 3\cdot 5\) que tienen números que son múltiplos de \(2\) y \(5\) o de \(3\) y \(5\).
prel_mult_int(2**3 * 3 * 5, 5, "interseccion")
En el intervalo [1,120] hay 16 números que son múltiplos de 2 y 5 o 3 y 5:
1: [10, 15, 20, 30, 40, 45, 50, 60, 70, 75, 80, 90, 100, 105, 110, 120]
En el intervalo [121,240] hay 16 números que son múltiplos de 2 y 5 o 3 y 5:
2: [130, 135, 140, 150, 160, 165, 170, 180, 190, 195, 200, 210, 220, 225, 230, 240]
En el intervalo [241,360] hay 16 números que son múltiplos de 2 y 5 o 3 y 5:
3: [250, 255, 260, 270, 280, 285, 290, 300, 310, 315, 320, 330, 340, 345, 350, 360]
En el intervalo [361,480] hay 16 números que son múltiplos de 2 y 5 o 3 y 5:
4: [370, 375, 380, 390, 400, 405, 410, 420, 430, 435, 440, 450, 460, 465, 470, 480]
En el intervalo [481,600] hay 16 números que son múltiplos de 2 y 5 o 3 y 5:
5: [490, 495, 500, 510, 520, 525, 530, 540, 550, 555, 560, 570, 580, 585, 590, 600]
Fórmula para el caso general de la función \(\varphi\)#
Teorema 19
Sea \(n = p_1^{\alpha_1}p_2^{\alpha_2} \cdot \ldots \cdot p_k^{\alpha_k}\) la descomposición canónica del entero positivo \(n\). Entonces
Demostración. Vamos a proceder por inducción en el número de primos que aparecen en la descomposición canónica del número \(n\).
Sea \(P(k)\) la proposición que afirma que para el entero positivo \(k\) se cumple que:
Base inductiva.
Verifiquemos que \(P(1)\) es verdadera.
Ya demostramos en el Teorema 18 que el caso cuando \(k = 1\) se cumple.
Hipótesis inductiva. Supongamos que \(P(1), P(2), P(3), \ldots , P(k)\) son verdaderas, es decir, que para el entero \(n = p_1^{\alpha_1}p_2^{\alpha_2} \cdot \ldots \cdot p_k^{\alpha_k}\) se cumple que:
Paso inductivo. Queremos probar que \(P(1), P(2), P(3), \ldots , P(k)\) implican \(P(k+1)\). Entonces tenemos lo siguiente.
Sea \(n= p_1^{\alpha_1}p_2^{\alpha_2} \cdot \ldots \cdot p_k^{\alpha_k} p_{k+1}^{\alpha_{k+1}}\).
Sea \(|A|\) el conjunto de los números positivos menores o iguales que \(p_1^{\alpha_1}p_2^{\alpha_2} \cdot \ldots \cdot p_k^{\alpha_k} p_{k+1}^{\alpha_{k+1}}\), entonces:
Sea \(B\) el conjunto de los números que son múltiplos de \(p_1,p_2, \ldots,p_k,p_{k+1}\), sin repetir algún elemento, menores o iguales que \(p_1^{\alpha_1}p_2^{\alpha_2} \cdot \ldots \cdot p_k^{\alpha_k} p_{k+1}^{\alpha_{k+1}}\).
Vamos a descomponer al conjunto \(B\) como \(B = B_1 \cup B_2\).
Sea \(B_1\) el conjunto de los números positivos que son múltiplos de \(p_1,p_2, \ldots,p_k\) menores que \(p_1^{\alpha_1}p_2^{\alpha_2} \cdot \ldots \cdot p_k^{\alpha_k}p_{k+1}^{\alpha_{k+1}}\).
Por la hipótesis de inducción sabemos que la cantidad de primos relativos con el número \(p_1^{\alpha_1}p_2^{\alpha_2} \cdot \ldots \cdot p_k^{\alpha_k}\) en el intervalo \([1,p_1^{\alpha_1}p_2^{\alpha_2} \cdot \ldots \cdot p_k^{\alpha_k}]\) es:
Entonces la cantidad de números que son múltiplos de \(p_1,p_2, \ldots,p_k\) serían:
Como esto todavía no llega hasta el número que deseamos \(p_1^{\alpha_1}p_2^{\alpha_2} \cdot \ldots \cdot p_k^{\alpha_k}p_{k+1}^{\alpha_{k+1}}\), utilizando la Proposición 18 tomamos intervalos de tamaño \(p_1^{\alpha_1}p_2^{\alpha_2} \cdot \ldots \cdot p_k^{\alpha_k}\) hasta llegar al número deseado:
Cada uno de estos intervalos tiene la misma cantidad de primos relativos con el número \(p_1^{\alpha_1}p_2^{\alpha_2} \cdot \ldots \cdot p_k^{\alpha_k}\) que el intervalo \([1,p_1^{\alpha_1}p_2^{\alpha_2} \cdot \ldots \cdot p_k^{\alpha_k}]\) y entonces también tiene la misma cantidad de números que son múltiplos de \(p_1,p_2, \ldots,p_k\). En total tenemos \(p_{k+1}^{\alpha_{k+1}}\) intervalos. Por lo tanto,
Sea \(B_2\) el conjunto de los números positivos que son múltiplos de \(p_{k+1}^{\alpha_{k+1}}\) menores que \(p_1^{\alpha_1}p_2^{\alpha_2} \cdot \ldots \cdot p_k^{\alpha_k} p_{k+1}^{\alpha_{k+1}}\). Por hipótesis sabemos que el número de primos relativos con \(p_{k+1}^{\alpha_{k+1}}\) en el intervalo \([1,p_{k+1}^{\alpha_{k+1}}]\) es:
Entonces la cantidad de números que son múltiplos de \(p_{k+1}^{\alpha_{k+1}}\) serían:
De igual manera para llegar hasta el número \(p_1^{\alpha_1}p_2^{\alpha_2} \cdot \ldots \cdot p_k^{\alpha_k}p_{k+1}^{\alpha_{k+1}}\), utilizando la Proposición 18, tomamos intervalos de tamaño \(p_{k+1}^{\alpha_{k+1}}\) hasta llegar al número deseado,
Cada uno de estos intervalos tiene la misma cantidad de primos relativos con el número \(p_{k+1}^{\alpha_{k+1}}\) que el intervalo \([1,p_{k+1}^{\alpha_{k+1}}]\) y entonces también tiene la misma cantidad de números que son múltiplos de \(p_{k+1}\). En total tenemos \(p_1^{\alpha_1}p_2^{\alpha_2} \cdot \ldots \cdot p_k^{\alpha_k}\) intervalos. Por lo tanto,
Por último debemos calcular \(|B_1 \cap B_2|\). Para esto, notemos que para compartir factores con \(p_{k+1}\) se tiene que ser múltiplo de \(p_{k+1}\). Podemos hacer los siguientes intervalos de tamaño \(p_1^{\alpha_1}p_2^{\alpha_2} \cdot \ldots \cdot p_k^{\alpha_k}p_{k+1}\):
Tenemos en total \(p_{k+1}^{\alpha_{k+1} -1}\) intervalos. En cada uno de estos intervalos de los cuales comparten factores con \(p_1^{\alpha_1}p_2^{\alpha_2} \cdot \ldots \cdot p_k^{\alpha_k}\), la \(\frac{1}{p_{k+1}}\) parte son múltiplos de \(p_{k+1}\), con lo cual tenemos que:
Por lo tanto, tenemos lo siguiente:
Ejemplo 58
¿Cuántos números positivos menores a \(9000\) son primos relativos con \(9000\)? Utiliza la fórmula del Teorema 19 para calcularlo.
Solución.
Como \(9000 = 5^3\cdot 3^2 \cdot 2^3\), entonces tenemos lo siguiente:
Por lo tanto hay \(2400\) números menores que \(9000\) que son primos relativos con \(9000\).
Vamos a ver una propiedad importante de la función \(\varphi\) de Euler. Veamos un ejemplo antes de pasar a demostrar esta propiedad.
Ejemplo 59
Sean \(m=4\) y \(n=9\), verifica que se cumple que \(\varphi(36) = \varphi(4) \cdot \varphi(9)\).
Solución.
Listemos los enteros desde el \(1\) hasta el \(36\).
Con la lista anterior podemos notar que en la segunda y cuarta línea no hay primos relativos con \(36\), ya que ninguno de esos números son primos relativos con \(4\) y por lo tanto no son primos relativos con \(36\). Sin embargo, los números que están en la primera y tercera línea si son primos relativos con \(4\). Además, en cada una de estas líneas hay \(6\) números que son primos relativos con \(9\), los cuales marcaremos con una \(\checkmark\). Así, tendríamos \(12\) números de la lista que son primos relativos con \(36\).
Entonces tenemos lo siguiente:
Teorema 20
Sean \(m\) y \(n\) enteros positivos primos relativos, entonces \(\varphi(mn) =\varphi(m) \varphi(n)\).
Demostración. Sea \(N = mn\), en donde \(m = p_1^{\alpha_1}p_2^{\alpha_2} \cdot \ldots \cdot p_k^{\alpha_k}\) y \(n = q_1^{\alpha_1}q_2^{\alpha_2} \cdot \ldots \cdot q_j^{\alpha_j}\).
Por hipótesis sabemos que \(m\) y \(n\) son primos relativos, entonces tanto \(m\) como \(n\) no tienen divisores en común, es decir que cada \(p_i \neq q_t\), donde \(1\le i \le k\) y \(1\le t \le j\).
Luego, desarrollando el lado izquierdo usando Teorema 19 tenemos que:
Por último, veamos que el resultado de la función \(\varphi(n)\) de Euler es casi siempre par.
Teorema 21
Sea \(n\) un entero positivo mayor que \(2\). Entonces \(\varphi(n)\) es par.
Demostración. Sea \(n\) un entero positivo mayor que \(2\).
Supongamos que \(n = p_1^{\alpha_1} p_2^{\alpha_2} \cdot \ldots \cdot p_s^{\alpha_s}\) es la factorización en primos de \(n\). Como para cada uno de los primos \(p_s\) de la factorización cumple que \((p_i,p_j) = 1\), donde \(1\le i,j \le s\) entonces por el Teorema 20 tenemos que:
Luego, por Teorema 18 tenemos lo siguiente,
Podemos ver que \(\varphi(p_k^{\alpha_k}) = p_k^{\alpha_k -1}(p_k - 1)\) es par en cualquiera de los dos casos siguientes:
Si \(p_k\) es un primo impar entonces \(p_k -1\) es par y asi \(p_k^{\alpha_k -1}(p_k - 1)\) es par.
Si \(p_k = 2\) y \(\alpha_k >1\), entonces \(p_k^{\alpha_k -1}\) es par y asi \(p_k^{\alpha_k - 1}(p_k - 1)\) es par.
Dado que \(n>2\), al menos una de estas dos condiciones se cumple, por lo tanto \(\varphi(p_k^{\alpha_k}) = p_k^{\alpha_k}(p_k - 1)\) es par para al menos algún entero \(k\), en donde \(1 \le k \le s\).
Así, concluimos que \(\varphi(n)\) es par. \(\square\)
Código para calcular la función \(\varphi\)#
El siguiente código nos ayudará a calcular el valor de la función \(\varphi(n)\). Para ello vamos a utilizar la función «factorizar_en_primos».
La siguiente función nos calcula el valor de la función \(\varphi(n)\) de Euler para un entero positivo \(n\).
def phi_euler(n):
resultado = n
sin_repetir = list(set(factorizar_en_primos(n)))
for i in sin_repetir:
resultado *= (1 - 1/ i)
return int(resultado)
phi_euler(143)
120
phi_euler(59)
58
phi_euler(9000)
2400
phi_euler(13400509)
13400508
Explicación del código#
En este capítulo utilizamos la función incorporada en Python any()
. Ésta función evalúa una secuencia de valores y regresa True
si al menos uno de los elementos es verdadero. Si todos son falsos, regresa False
.
No es un condicional en sí, pero puede usarse dentro de condicionales para tomar decisiones basadas en si alguno de los valores cumple una condición.
Veamos cómo funcionan los códigos.
El primer código que creamos fue con el propósito de poder ver más a fondo la Proposición 18.
def prel_mult_int(numero, intervalos, opcion):
for i in range(1,intervalos+1):
int_1 = i*numero - numero +1
int_2 = i*numero
if opcion == "prelativos":
primos_relativos = [x for x in range(int_1,int_2+1) if algoritmo_euclides(numero,x) == 1]
print(f"En el intervalo [{int_1},{int_2}] hay {len(primos_relativos)} primos relativos con {numero} y son: ")
print(primos_relativos)
elif opcion == "multiplos":
primos = set(factorizar_en_primos(numero))
multiplos = [x for x in range(int_1,int_2+1) if any(x % d == 0 for d in primos)]
print(f"En el intervalo [{int_1},{int_2}] hay {len(multiplos)} números que son múltiplos de {primos} y son: ")
print(f"{i}: {multiplos}")
elif opcion == "interseccion":
interseccion = [x for x in range(int_1,int_2+1) if (x%2 == 0 and x%5 == 0) or (x%3 == 0 and x%5 == 0)]
print(f"En el intervalo [{int_1},{int_2}] hay {len(interseccion)} números que son múltiplos de 2 y 5 o 3 y 5: ")
print(f"{i}: {interseccion}")
else:
print("Opción no válida. Ingresa como tercer argumento: 'prelativos', 'multiplos' o 'interseccion'.")
Definimos una función llamada «prel_mult_int» la cual recibe tres argumentos. El primero y el segundo argumento, son números enteros. El tercer argumento es «opcion», define el comportamiento de la función. Acepta únicamente los valores «prelativos», «multiplos» o «interseccion». Cada uno de estos valores indica un caso específico para ejecutar la lógica.
def prel_mult_int(numero, intervalos, opcion):
Empezamos un ciclo
for
el cual tiene como rango desde \(1\) hasta el número de intervalos que queremos crear.
Luego, creamos las variables «int_1» y «int_2», las cuales nos ayudan a formar los bloques del tamaño del argumento «numero» que introducimos.
for i in range(1,intervalos+1):
int_1 = i*numero - numero + 1
int_2 = i*numero
Creamos una estructura de control condicional. Dependiendo del valor que se de al argumento «opcion», es el código que se ejecuta.
Si el valor del argumento «opcion» es «prelativos», el código entra en el condicionalif
. En el bloque identado creamos la variable «primos_relativos» la cual es una lista, ésta se crea con una comprensión de listas. Dentro de ella se inicia un ciclofor
el cual recorre los valores dentro del intervalo \([int_1,int_2]\), si se cumple la condición de que el valor es primo relativo con «numero» éste se agrega a la lista. Una vez que se crea la lista, el código nos da a conocer el intervalo, la cantidad de primos relativos que hay con respecto a «numero» y una lista con todos los números. Este proceso se repite hasta crear todos los intervalos que le pedimos crear al código en la variable «intervalos».
if opcion == "prelativos":
primos_relativos = [x for x in range(int_1,int_2+1) if algoritmo_euclides(numero,x) == 1]
print(f"En el intervalo [{int_1},{int_2}] hay {len(primos_relativos)} primos relativos con {numero} y son: ")
print(primos_relativos)
Si el valor del argumento «opcion» es «multiplos», el código entra en el primer condicional
elif
. En el bloque identado se crea la variable «primos», la cual es un conjunto que contiene los primos que aparecen en la factorización en primos de la variable «numero». Luego, creamos la variable «multiplos» la cual es una lista que se crea con una comprensión de listas. Dentro de ella se inicia un ciclofor
el cual recorre los valores dentro del intervalo \([int_1,int_2]\), el valor se agrega a la lista si la funciónany()
regresa un valor deTrue
.
Dentro de la funciónany()
se revisa si el valor que tomamos del intervalo es divisible entre cualquiera de los primos del conjunto «primos». Si al menos un primo divide al valor, la funciónany()
regresaTrue
. Si ningún primo divide al valor entonces la función nos regresa un valor deFalse
. Una vez que se termina de crear la lista, el código nos imprime el intervalo, el número de valores que contiene y de quién son múltiplos éstos, además de la lista con todos ellos. Este proceso se repite hasta crear todos los intervalos que le pedimos crear al código en la variable «intervalos».
elif opcion == "multiplos":
primos = set(factorizar_en_primos(numero))
multiplos = [x for x in range(int_1,int_2+1) if any(x % d == 0 for d in primos)]
print(f"En el intervalo [{int_1},{int_2}] hay {len(multiplos)} números que son múltiplos de {primos} y son: ")
print(f"{i}: {multiplos}")
Si el valor del argumento «opcion» es «interseccion», el código entra en el segundo condicional
elif
. En el bloque identado creamos la variable «interseccion» la cual es una lista, ésta se crea con una comprensión de listas. Dentro de ella se inicia un ciclofor
el cual recorre los valores dentro del intervalo \([int_1,int_2]\), si se cumple la condición de que el valor es divisible entre \(2\) y \(5\) o entre \(3\) y \(5\), éste se agrega a la lista. Una vez que se crea la lista, el código nos da a conocer el intervalo, la cantidad de múltiplos de \(2\) y \(5\) o de \(3\) y \(5\) y una lista con todos los números. Este proceso se repite hasta crear todos los intervalos que le pedimos crear al código en la variable «intervalos».
elif opcion == "interseccion":
interseccion = [x for x in range(int_1,int_2+1) if (x%2 == 0 and x%5 == 0) or (x%3 == 0 and x%5 == 0)]
print(f"En el intervalo [{int_1},{int_2}] hay {len(interseccion)} números que son múltiplos de 2 y 5 o 3 y 5: ")
print(f"{i}: {interseccion}")
Finalmente, se el valor del argumento «opcion» no es ninguno de los \(3\) anteriores, el código nos dice que la opción no es válida y las opciones válidas.
else:
print("Opción no válida. Ingresa como tercer argumento: 'prelativos', 'multiplos' o 'interseccion' ")
El segundo código que creamos nos calcula el valor de la función \(\varphi(n)\) de Euler.
def phi_euler(n):
resultado = n
sin_repetir = list(set(factorizar_en_primos(n)))
for i in sin_repetir:
resultado *= 1 - 1/ i
return int(resultado)
Definimos una función llamada «phi_euler» la cual recibe como argumento un número entero positivo \(n\).
def phi_euler(n):
Creamos la variable «resultado» para guardar el valor de \(n\). Y creamos la variable «sin_repetir» la cual es una lista que contiene los primos involucrados en la factorización en primos del número \(n\) sin repetir algunos de estos.
resultado = n
sin_repetir = list(set(factorizar_en_primos(n)))
Comenzamos un ciclo
for
el cual va tomando cada primo de la lista «sin_repetir» y calcula el valor de \(1 - \frac{1}{p}\) y se lo multiplica a la variable «resultado», en esta variable se va guardando el valor y se le siguen multiplicando los valores de cada uno de los primos en la lista siguiendo la idea de la fórmula para el caso general del Teorema 19. Finalmente la función nos regresa el valor de la variable «resultado», el cual sólo convertimos en entero porque Python nos calcula los valores pero deja ceros en los decimales, es decir, si el resultado es \(8\) Python nos regresa un valor flotante de \(8.00\).
for i in sin_repetir:
resultado *= 1 - 1/ i
return int(resultado)
Ejercicios de práctica#
Demuestra el regreso del Lema 7. Si \(\varphi(p) = p-1\) entonces \(p\) es primo.
Sea \(p\) primo y \(n\) un entero positivo. Demuestra que si \(p \nmid n\), entonces \(\varphi(p \cdot n) = (p-1)\cdot \varphi(n)\). Intenta dar un argumento que no use la fórmula del Teorema 19.
Sean \(m, n\) enteros positivos. Demuestra que si \(m \mid n\) entonces \(\varphi(m) \mid \varphi(n)\).
Demuestra lo siguiente:
\(\varphi( \sigma(666)) = 2 \varphi(666)\).
Si \(p\) es primo entonces \(\varphi(p) + \sigma(p) = 2p\).
Demuestra que si \(n\) es un entero positivo compuesto entonces \(\varphi(n) \le n - \sqrt{n}\).