s1Eva_IT2008_T1 Teorema de Wilson

Ejercicio1Eva_IT2008_T1 Teorema de Wilson

“Un número p es primo si y solo si el factorial (p-1)! + 1 es divisible por p”.

El ejercicio se divide en dos partes principales:
– determinar si un número es primo
– Si es primo, validar lo que indica Wilson

Para la primera parte, se usa el concepto de residuo de la división para determinar si el número es primo.

# revisa esprimo 
esprimo = 1
divisor = 2
while not(divisor>=n or esprimo==0):
    r = n%divisor
    if (r == 0):
        esprimo = 0
    divisor = divisor + 1

La bandera usada es «esprimo» que inicia con el supuesto de ser verdadero ó 1.

Solo si el número resulta ser primo, se aplican las operaciones de Wilson. Primero determinando el valor del factorial,

wilson = -1
if esprimo == 1:
    
    # factorial
    factor = 1
    i = 1
    while not(i>=n):
        factor = factor*i
        i = i + 1

y luego revisar Wilson

    # revisa Wilson 
    residuo = (factor + 1) % n
    if residuo == 0:
        wilson = 1
    else:
        wilson = 0

Se añaden los bloques de ingreso y salida para completar el algoritmo


Algoritmo en Python

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 1Eva_IT2008_T1 Teorema de Wilson

# INGRESO
n = int(input('ingrese numero primo: '))
while not(n>0):
    n = int(input('ingrese numero positivo: '))

# PROCEDIMIENTO

# revisa esprimo 
esprimo = 1
divisor = 2
while not(divisor>=n or esprimo==0):
    r = n%divisor
    if (r == 0):
        esprimo = 0
    divisor = divisor + 1

wilson = -1
if esprimo == 1:
    
    # factorial
    factor = 1
    i = 1
    while not(i>=n):
        factor = factor*i
        i = i + 1
    
    # revisa Wilson 
    residuo = (factor + 1) % n
    if residuo == 0:
        wilson = 1
    else:
        wilson = 0

# SALIDA
print('cumple Wilson: ', wilson)

resultado del algoritmo

ingrese numero primo: 7
cumple Wilson:  1
>>> 
== RESTART: D:\Ejemplos\unprograma.py ==
ingrese numero primo: 13
cumple Wilson:  1
>>> 
== RESTART: D:\Ejemplos\unprograma.py ==
ingrese numero primo: 8
cumple Wilson:  -1
>>>