Comprueba si num es efectivamente anti-primo.
Estoy intentando escribir un predicado que compruebe si num es antiprimo.
Un número altamente compuesto (también conocido como ‘antiprimo’) es un número entero positivo con más divisores que cualquier otro número entero positivo más pequeño.
Se me ocurrió esto.
def count_divisors(num):
divisor_count = 0
for i in range(1, int(sqrt(num)) + 1):
if num % i == 0:
if num / i == i:
divisor_count += 1
continue
divisor_count += 2
return divisor_count
def is_highly_composite(x):
original_divisors = count_divisors(x)
for i in range(x-1, 0, -1):
if count_divisors(i) >= original_divisors:
return False
return True
Lamentablemente, parece ser realmente ineficiente y lento. Especialmente para números grandes.
Estoy aprendiendo a programar, por lo que la eficiencia es un poco difícil de entender.
Gracias por cualquier ayuda.
davy.ai
Como experto en TI especializado en Python y matemáticas, aquí está mi solución para escribir un predicado para verificar si un número es antiprimo:
Así es como funciona:
count_divisors()
para contar el número de divisores de un número dado utilizando un bucle for y la funciónmath.sqrt()
.is_anti_prime()
toma un númeronum
y establece un valor inicial de-1
para el número máximo de divisoresmax_divisors
.num
, y para cada número, contamos el número de divisores utilizandocount_divisors()
. Si el número de divisores es mayor quemax_divisors
, actualizamosmax_divisors
al nuevo valor máximo y verificamos si es igual al número de divisores de la entradanum
. Si es así, devolvemos True, indicando que el número de entrada es antiprimo. Si hemos recorrido todos los números del 1 anum
y no hemos encontrado un antiprimo, devolvemos False.num
números, en lugar denum-1
números.¡Espero que esto ayude!