Partida Rol por web

[TALLER] Online Math Open: Umbria team

Problema 21

Cargando editor
01/11/2019, 16:41
Lelouch15
Sólo para el director

Enunciado:

21. Let p and q be prime numbers such that ((p−1)^(q−1)) −1 is a positive integer that divides ((2q)^(2p)) −1. Compute the sum of all possible values of pq.

Interpretación:

Lo que he entendido yo es que buscamos que ((2q)^(2p)) −1 dividido por ((p−1)^(q−1)) −1 de lugar a un entero, siendo p y q dos números primos arbitrarios. He creado un programa en el que comprobaba qué comprobaba los 300 primeros números primos para p y q (siento el número, pero mi portátil no da para más), resultando 4 pares de valores: p=3,5,7,17 y q=2,2,2,2. Como parecía ser que q era igual a 2, lo he fijado y he mirado los 1500 primeros primos para p y no ha aparecido ningún otro.

Entonces, según mi opinión, parece ser que el resultado es 3*2+5*2+7*2+17*2 = 64.

*************

Anotación 1: Me he leído las normas de OMO y no sé hasta qué punto es válido el programa, puesto que ellos dicen que se puede realizar todo absolutamente a mano.

Anotación 2: Los 1500 primeros números los he sacado de Mathematica con la función: Table[Prime[n],{n,1500}], si fuera trampas hacer esto, fácilmente se puede crear un programa que evalúe si un número es primo y con un bucle que se calculara.

*************

No sé hasta que punto es correcta la resolución pero lo dejo por aquí por si sirve de ayuda

Saludos!

Cargando editor
02/11/2019, 12:01
Atreide

Lo que he entendido yo es que buscamos que ((2q)^(2p)) −1 dividido por ((p−1)^(q−1)) −1 de lugar a un entero, siendo p y q dos números primos arbitrarios.

Exacto, yo he entendido lo mismo.

 

Yo intenté algo parecido, pero el problema era que al hacer esas operaciones los números se me iban de rango. ¿Cómo lo has hecho tú?

Por mi parte, tengo poco que decir. Sí que los problemas suelen poder hacerse a mano. Este, por ejemplo, seguramente sería posible simplificarlo usando propiedades de números primos, como el teorema de Euler.

Cargando editor
02/11/2019, 13:00
Lelouch15

Jajajja seguro que se puede simplificar, pero mi conocimiento de teoría de números es 0.

El programa lo hice en otro PC y si lo quieres lo puedo poner, pero el funcionamiento básicamente eran 2 bucles for y luego si el resto da cero (lo que supone que es entero) pues que meta a ambos en una lista. Pongo el esquema del programa de Python:

Lista de Primos=[] #Aquí metí los 300 primeros primos xD

P=[]

Q=[]

for p in ListadePrimos:

  for q in Lista de primos:

     If ((2q)^(2p)) −1  % ((p−1)^(q−1)) −1 ==0

       P.append(p)

       Q.append(q)

 

Y luego multipliqué esos productos de p y q. Al poner los 1000 primeros primos el programa no tiraba xD Al poner los 300 si tiró, así que lo dejé ahí y luego como vi que q siempre tomaba el valor 2, decidí fijarlo y estudiar los 1000 primeros primos para p y nada, que no salió ninguno más.