Finn brøkene

Her kan brukere av forum utfordre hverandre med morsomme oppgaver og nøtter man ønsker å dele med andre. Dette er altså ikke et sted for desperate skrik om hjelp, de kan man poste i de andre forumene, men et sted for problemløsing på tvers av trinn og fag.

Finn brøkene

Innlegg LAMBRIDA » 04/08-2018 17:17

Eg vil komme med ei oppgave som eg tror noen vil ha glede av å prøve seg på, men eg veit ikke hvor vanskelig den er.

Oppgaven
Finn seks forskjellige brøker med teller 1 og den største nevneren lavest mulig. Når hver brøk multipliseres med 60, så vil tre av de seks produktene være heltallige og summen av de seks produktene 67.
Hvilke seks brøker kan dette være?
LAMBRIDA offline
Dirichlet
Dirichlet
Innlegg: 176
Registrert: 16/11-2011 19:50
Bosted: Hjelmeland

Re: Finn brøkene

Innlegg DennisChristensen » 07/08-2018 11:43

LAMBRIDA skrev:Eg vil komme med ei oppgave som eg tror noen vil ha glede av å prøve seg på, men eg veit ikke hvor vanskelig den er.

Oppgaven
Finn seks forskjellige brøker med teller 1 og den største nevneren lavest mulig. Når hver brøk multipliseres med 60, så vil tre av de seks produktene være heltallige og summen av de seks produktene 67.
Hvilke seks brøker kan dette være?


Fin øving i programmering (Python) for meg dette her. Jeg er ganske uerfaren, så vennligst ikke mobb dersom koden ser elendig ut. Dersom noen har kommentarer om hvordan den kan effektiviseres ytterligere, tas det gjerne imot! Jeg tolker oppgaven dithen at vi ønsker at minst 3 av produktene skal være heltall.

Kode: Merk alt
import math
import time
start = time.time()
[a,b,c,d,e,f] = [1]*6
k=1
førsteløsning = False
svar1 = []
svar = []
m=0
while k>0:
    if 60*(1/a + 1/b + 1/c + 1/d + 1/e + 1/f) == 67: # Sjekker betingelser
        counter = 0
        for i in [a,b,c,d,e,f]: # Neste betingelse
            if 60/i == math.floor(60/i):
                counter += 1
        if counter >= 3 and len([a,b,c,d,e,f]) == len(set([a,b,c,d,e,f])): # Siste betingelser
            svar1 = [a,b,c,d,e,f]
            if førsteløsning == False:
                m = max(svar1)
                svar = svar1
                førsteløsning = True
            if max(svar1) < m:
                m = max(svar1) # Ta kun vare på minste maksverdi funnet
                svar = svar1
    if førsteløsning == True and a > m: # Dersom a>m vil vi kun finne større maksverdier senere
        break

    f += 1 # Tell oppover
    if f == 10*k:
        f = 1
        e += 1
        if e == 10*k:
            [e, f] = [1] * 2
            d += 1
            if d == 10*k:
                [d, e, f] = [1] * 3
                c += 1
                if c == 10*k:
                    [c, d, e, f] = [1] * 4
                    b += 1
                    if b == 10*k:
                        [b, c, d, e, f] = [1]*5
                        a += 1
                        if a == 10*k:
                            k += 1
elapsed = (time.time() - start)
print("Den ønskede løsningen er 1/" + str(svar[0]) + ", 1/" + str(svar[1]) + ", 1/" + str(svar[2]) + ", 1/" + str(svar[3]) + ", 1/" + str(svar[4]) + " og " + "1/" + str(svar[5]) + ", funnet på " + str(elapsed) + " sekunder.")


som gir svaret:
Kode: Merk alt
Den ønskede løsningen er 1/10, 1/2, 1/5, 1/6, 1/12 og 1/15, funnet på 46.237741231918335 sekunder.
DennisChristensen offline
Fermat
Fermat
Innlegg: 751
Registrert: 09/02-2015 23:28
Bosted: Oslo

Re: Finn brøkene

Innlegg Mattegjest » 07/08-2018 12:40

Viser til oppgaven. Sitat: " Finn seks forskjellige brøker med nevner lik 1 ".

Løysinga til D. C . ( førre innlegg ) oppfyller ikkje dette kravet ( gitt at eg har tolka
oppgåva rett )
Mattegjest offline

Re: Finn brøkene

Innlegg LAMBRIDA » 07/08-2018 15:14

Viss for eksempel 0,333333333333 multipliser med 60, og produktet ikke er et helt tall. Da må eg beklage at bare to av de seks produktene er heltallige.
LAMBRIDA offline
Dirichlet
Dirichlet
Innlegg: 176
Registrert: 16/11-2011 19:50
Bosted: Hjelmeland

Re: Finn brøkene

Innlegg DennisChristensen » 07/08-2018 15:23

Mattegjest skrev:Viser til oppgaven. Sitat: " Finn seks forskjellige brøker med nevner lik 1 ".

Løysinga til D. C . ( førre innlegg ) oppfyller ikkje dette kravet ( gitt at eg har tolka
oppgåva rett )


Herregud, så sløvt av meg å overse dette. Jeg har rettet opp koden min nå. Nå tar programmet selvsagt mye lenger tid, ettersom det finnes færre slike løsninger. Mye av tiden går riktignok til å sjekke betingelsen $a > m$, som ikke trengs for å finne en hvilken som helst løsning, men ettersom vi ønsker å finne løsningen med minste maksverdi av nevnere, må en sjekk som dette være med.

LAMBRIDA skrev:Viss for eksempel 0,333333333333 multipliser med 60, og produktet ikke er et helt tall. Da må eg beklage at bare to av de seks produktene er heltallige.


Poenget mitt er bare at vi trolig ikke insisterer på at nøyaktig tre av produktene skal være heltallige. Det går også fint om 4, 5 eller alle 6 er det.
DennisChristensen offline
Fermat
Fermat
Innlegg: 751
Registrert: 09/02-2015 23:28
Bosted: Oslo

Re: Finn brøkene

Innlegg DennisChristensen » 08/08-2018 11:18

Kan legge til at dersom vi ønsker løsningen med minste maksverdi for teller, hvor nøyaktig tre av produktene er heltallige, kan vi endre betingelsen $\texttt{if counter >= 3}$ om til $\texttt{if counter == 3}$ i linje 16. Da får vi følgende svar:

Kode: Merk alt
Den ønskede løsningen er 1/28, 1/2, 1/5, 1/6, 1/7 og 1/14, funnet på 448.02368211746216 sekunder.
DennisChristensen offline
Fermat
Fermat
Innlegg: 751
Registrert: 09/02-2015 23:28
Bosted: Oslo

Re: Finn brøkene

Innlegg LAMBRIDA » 08/08-2018 20:56

Veldig fin løsning.
Da er vel ikke min løsning med den største nevneren lavest mulig, for eg har denne løsningen:
1/2 1/3 1/8 1/10 1/18 1/360
LAMBRIDA offline
Dirichlet
Dirichlet
Innlegg: 176
Registrert: 16/11-2011 19:50
Bosted: Hjelmeland

Hvem er i forumet

Brukere som leser i dette forumet: Ingen registrerte brukere og 3 gjester