Skip to content

Instantly share code, notes, and snippets.

@orjanv
Created May 5, 2024 07:03
Show Gist options
  • Save orjanv/551be55e9c78bcef645e838c961bcde9 to your computer and use it in GitHub Desktop.
Save orjanv/551be55e9c78bcef645e838c961bcde9 to your computer and use it in GitHub Desktop.
Finn merkelige tall, altså overskuddstall hvor ingen kombinasjonssummer av divisorer ikke fører til det opprinnelige tallet.
#!/usr/bin/python3
# -*- coding: utf-8 -*-
#
# Finn merkelige tall, definert som følger:
# 1. Summen av alle faktorene (unntatt tallet selv) er større enn selve tallet.
# 2. Du kan ikke plukke ut noen av de mindre faktorene til tallet og legge dem
# sammen for å få det samme tallet tilbake.
#
# Det finnes syv tall under 10000: [70, 836, 4030, 5830, 7192, 7912, 9272]
from more_itertools import powerset
# finne divisorer for ett tall og summere dem
def finn_divisorer(dividend):
divisor_liste = []
divisor_sum = 0
for divisor in range(1, int((dividend // 2) + 1)):
if dividend % divisor == 0:
divisor_liste.append(divisor)
divisor_sum += divisor
return divisor_sum, divisor_liste
if __name__ == "__main__":
merkelige_tall = []
for tall in range(1, 10000 + 1):
# Finn summen av divisorerer og divisorliste
divisor_sum, divisor_liste = finn_divisorer(tall)
# Er tallet abundant?
if divisor_sum > tall:
# Sjekk om divisor subset != tallet -> merkelig
if not any(sum(subset) == tall for subset in powerset(divisor_liste)):
merkelige_tall.append(tall)
print(f'Fant et merkelig tall, {tall}')
print(merkelige_tall)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment