Created
May 5, 2024 07:03
-
-
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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