Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: [opgelost]python-progje spielerei  (gelezen 935 keer)

Offline tomubuntu

  • Lid
[opgelost]python-progje spielerei
« Gepost op: 2009/07/22, 19:41:14 »
Hoi,

Sinds enige tijd ben ik wat aan het experimenteren met python. Nu had ik ergens een idee opgevangen over ideale getallen; waarmee men bedoelde dat dit een getal was, waarvan de som van zijn delers gelijk waren aan dit getal, vb eerste ideaal getal = 6 (delers 1+2+3=6).
Ik wou hiervoor een progammaatje maken om deze getallen te berekenen, bijgevoegd:

<code>
for a in range(1,10000):
    teller=0
    if a%2==0:
        for b in range(1,a):
            if a%b==0:
                teller=teller+b
                if teller==a:
                    print a
    else:
        for b in range(1,a,2):
            if a%b==0:
                teller=teller+b
                if teller==a:
                    print a
</code>
De eerste "if" had ik erin gebracht om het programmaatje iets sneller te maken, omdat dit blijkbaar toch iets vergt van de computer, en het bracht duidelijk snelheidswinst.

Het probleem dat ik hier nog mee heb is dat er ook "niet ideale" getallen getoond worden, met reden dat hij, vanaf dat het getal bereikt wordt in teller, hij dit getal toont, terwijl hij nog niet aan het einde is van de reeks delers. Hier vind ik niet direct een oplossing voor (wat waarschijnlijk wel heel simpel zal zijn, maar niet evident voor een beginnertje).

Wil hier iemand mee helpen?  
« Laatst bewerkt op: 2009/07/22, 20:18:43 door tomubuntu »

Offline tomubuntu

  • Lid
Re: python-progje spielerei
« Reactie #1 Gepost op: 2009/07/22, 20:17:25 »
Hoi,

Reeds opgelost (zie hieronder), indien u een betere manier weet, graag toch nog advies!

<code>
for a in range(1,10000):
    teller = 0
    if a%2==0:
        for b in range(1,a):
            if a%b==0:
                teller=teller+b
        if teller==a:
            print a
    else:
        for b in range(1,a,2):
            if a%b==0:
                teller=teller+b
        if teller==a:
            print a
           
</code>

Offline JvH

  • Lid
Re: [opgelost]python-progje spielerei
« Reactie #2 Gepost op: 2009/07/22, 20:45:50 »
Ah je had in de tussentijd al gepost :)
Dit is wat ik in elkaar heb gedraaid:
for a in range(1,10000):
    teller=0
    #a >> 1 = a / 2
    for b in range(1, (a >> 1) + 1):
        if a % b == 0:
            teller = teller + b
    if teller == a:
        print a

Bij het itereren over b hoef je maar tot de helft van a te gaan; door een hoger getal kan a toch niet gedeeld worden.
« Laatst bewerkt op: 2009/07/22, 20:51:44 door JvH »