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.

Moderatorer: Vektormannen, espen180, Aleks855, Solar Plexsus, Gustav, Nebuchadnezzar, Janhaa

Svar
LAMBRIDA
Ramanujan
Ramanujan
Innlegg: 250
Registrert: 16/11-2011 19:50
Sted: Hjelmeland

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?
DennisChristensen
Grothendieck
Grothendieck
Innlegg: 826
Registrert: 09/02-2015 23:28
Sted: Oslo

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: Velg 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: Velg alt

Den ønskede løsningen er 1/10, 1/2, 1/5, 1/6, 1/12 og 1/15, funnet på 46.237741231918335 sekunder.
Mattebruker

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 )
LAMBRIDA
Ramanujan
Ramanujan
Innlegg: 250
Registrert: 16/11-2011 19:50
Sted: Hjelmeland

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.
DennisChristensen
Grothendieck
Grothendieck
Innlegg: 826
Registrert: 09/02-2015 23:28
Sted: Oslo

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
Grothendieck
Grothendieck
Innlegg: 826
Registrert: 09/02-2015 23:28
Sted: Oslo

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: Velg alt

Den ønskede løsningen er 1/28, 1/2, 1/5, 1/6, 1/7 og 1/14, funnet på 448.02368211746216 sekunder.
LAMBRIDA
Ramanujan
Ramanujan
Innlegg: 250
Registrert: 16/11-2011 19:50
Sted: Hjelmeland

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
Svar