Matematické Fórum

Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.

Nástěnka
22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.

Nejste přihlášen(a). Přihlásit

#26 25. 11. 2023 20:28

Stýv
Vrchní cenzor
Příspěvky: 5692
Reputace:   215 
Web
 

Re: Jak vyřešit rovnici - příklad

↑↑ mák: Zrovna jsem se k tomu taky dopocital, mohl jsem nejdriv zkouknout forum…

↑↑ check_drummer: Da se to hrubou silou, moznosti je necelych 7 milionu, i python to zvladne z par vterin.

Offline

 

#27 26. 11. 2023 04:17

check_drummer
Příspěvky: 4650
Reputace:   101 
 

Re: Jak vyřešit rovnici - příklad

↑ Stýv:
Ale musíš to nějak omezit ne? Protože číslic je 20 a každá má 10 možností... To je víc než 7 milionů.


"Máte úhel beta." "No to nemám."

Offline

 

#28 26. 11. 2023 10:15

Stýv
Vrchní cenzor
Příspěvky: 5692
Reputace:   215 
Web
 

Re: Jak vyřešit rovnici - příklad

↑ check_drummer: Staci uvazovat kombinace cislic bez ohledu na poradi. Napr. 10 jednicek a 10 dvojek: Spocitam 10*1^20 + 10*2^20 a overim, jestli vysledek ma ocekavany pocet jednotlivych cifer.

Offline

 

#29 26. 11. 2023 12:05

mák
Místo: Vesmír, Galaxie MD
Příspěvky: 869
Reputace:   62 
 

Re: Jak vyřešit rovnici - příklad

Zdravím, já jsem použil z pohodlnosti program Maxima.
A protože nevím jak se generují sestavy bez opakování, nechal jsem je vygenerovat s opakováním tak, aby každé číslo tam bylo použito minimálně ani jednou a maximálně pětkrát příkazem:

Code:

Sestavy_s_opakovanim: cartesian_product_list(
    [0,1],[0,1,2],
    [1,2],[1,2,3],
    [2,3],[2,3,4],
    [3,4],[3,4,5],
    [4,5],[4,5,6],
    [5,6],[5,6,7],
    [6,7],[6,7,8],
    [7,8],[7,8,9],
    [8,9],[8,9,0],
    [9,0],[9,0,1]
)$

Vyšlo 60466176 možností.
To jsem zredukoval příkazem:

Code:

Sestavy_bez_opakovani: unique(sort(map(lambda([z], sort(z)), Sestavy_s_opakovanim)))$

na počet 465125.
Ty jsem otestoval zda splňují požadovanou podmínku. Vyšla jediná možnost.


LibreOffice Verze: 7.6.6.3, Maxima 5.47.0 (SBCL)

Offline

 

#30 26. 11. 2023 14:27

check_drummer
Příspěvky: 4650
Reputace:   101 
 

Re: Jak vyřešit rovnici - příklad

↑ mák:
Tajk to mi asi něco uniklo - nemusíš tedy procházet všechna možnosti? Věchny 20-tice číslic 1 až 9?


"Máte úhel beta." "No to nemám."

Offline

 

#31 28. 11. 2023 13:31

surovec
Příspěvky: 981
Reputace:   23 
 

Re: Jak vyřešit rovnici - příklad

Praktická úloha je vyřešena (geolokace kešky), ale ještě přemýšlím nad samotným čistě matematickým (programátorským) problémem:
↑ Stýv: Dobře, takových možností je [mathjax]\binom{29}{20}=10\,015\,005[/mathjax], to už je zvládnutelný počet na rozdíl od [mathjax]10^{20}[/mathjax] při opačném postupu, ale jak naprogramovat plnění těch proměnných (kombinace s opakováním), to mě nijak nenapadá...
↑ mák: Jestli tomu dobře rozumím, tak jsi testoval jen některé možnosti (min 0krát a max 5krát) a náhodou mezi nimi bylo jedno z možných řešení? A co když jsou další řešení (viz níže)? Nebo jsem to špatně pochopil?

Pro zajímavost, zkusil jsem na to jít od jednodušších úloh podobného zadání s kompletním řešením všech možností, ale u vyšších mocnin jsem se už zasekl, třeba někoho napadne něco dalšího:
[mathjax]A^1=A[/mathjax], možná řešení [mathjax]\{0,1,2,3,4,5,6,7,8,9\}[/mathjax]
[mathjax]A^2+B^2=AB[/mathjax], nemá řešení [mathjax]\emptyset[/mathjax]
[mathjax]A^3+B^3+C^3=ABC[/mathjax], možná řešení [mathjax]\{153,370,371,407\}[/mathjax]
[mathjax]A^4+B^4+C^4+D^4=ABCD[/mathjax], možná řešení [mathjax]\{1634,8208,9474\}[/mathjax]
[mathjax]A^5+B^5+C^5+D^5+E^5=ABCDE[/mathjax], možná řešení [mathjax]\{54748,92727,93084\}[/mathjax]
[mathjax]A^6+B^6+C^6+D^6+E^6+F^6=ABCDEF[/mathjax], možná řešení [mathjax]\{548834\}[/mathjax]
[mathjax]A^7+B^7+C^7+D^7+E^7+F^7+G^7=ABCDEFG[/mathjax], možná řešení [mathjax]\{1741725,4210818,9800817,9926315\}[/mathjax]
[mathjax]A^8+B^8+C^8+D^8+E^8+F^8+G^8+H^8=ABCDEFGH[/mathjax], možná řešení [mathjax]\{24678050,24678051,88593477\}[/mathjax]
[mathjax]A^9+B^9+C^9+D^9+E^9+F^9+G^9+H^9+I^9=ABCDEFGHI[/mathjax], možná řešení [mathjax]\{146511208,472335975,534494836,912985153\}[/mathjax]

Teď už je asi jasné, proč si myslím, že zadaná rovnice má více řešení...

Offline

 

#32 28. 11. 2023 13:41

check_drummer
Příspěvky: 4650
Reputace:   101 
 

Re: Jak vyřešit rovnici - příklad

Aha, stačí spočítat součet těch mocnin a zjistit ty číslice výsledku....


"Máte úhel beta." "No to nemám."

Offline

 

#33 28. 11. 2023 13:43

check_drummer
Příspěvky: 4650
Reputace:   101 
 

Re: Jak vyřešit rovnici - příklad

↑ surovec:
Budeš to generovat jako uspořádané n-tice, to jde algoritmicky snadno provést....


"Máte úhel beta." "No to nemám."

Offline

 

#34 28. 11. 2023 14:47

surovec
Příspěvky: 981
Reputace:   23 
 

Re: Jak vyřešit rovnici - příklad

↑ check_drummer:Ano, věřím, že to asi jde snadno, ale to není ta pravá odpověď, ve kterou jsem doufal ;-)
Rozumíme si v tom, že chci vygenerovat všechny k-členné kombinace s opakováním z n-prvků, nikoliv variace? Čuchám v tom nějakou rekurzi, ale zatím mě nic nenapadá...

Offline

 

#35 28. 11. 2023 17:32

check_drummer
Příspěvky: 4650
Reputace:   101 
 

Re: Jak vyřešit rovnici - příklad

↑ surovec:
Tak jako první umstím x:=1 a potom každé další umístěné číslo nesmí být menší než x... (a už jich umístím jen k-1) to je ta rekurze... :-)
A až teda odbudu tu 1, tak zkusím x:=2, atd...


"Máte úhel beta." "No to nemám."

Offline

 

#36 28. 11. 2023 20:35

Stýv
Vrchní cenzor
Příspěvky: 5692
Reputace:   215 
Web
 

Re: Jak vyřešit rovnici - příklad

Code:

powers = [i**20 for i in range(10)]
count = 0
for n9 in range(1, 21):
    for n8 in range(0, 21-n9): 
        for n7 in range(0, 21-n9-n8): 
            for n6 in range(0, 21-n9-n8-n7): 
                for n5 in range(0, 21-n9-n8-n7-n6): 
                    for n4 in range(0, 21-n9-n8-n7-n6-n5): 
                        for n3 in range(0, 21-n9-n8-n7-n6-n5-n4): 
                            for n2 in range(0, 21-n9-n8-n7-n6-n5-n4-n3): 
                                for n1 in range(0, 21-n9-n8-n7-n6-n5-n4-n3-n2):
                                    digit_counts = [20-n1-n2-n3-n4-n5-n6-n7-n8-n9,n1,n2,n3,n4,n5,n6,n7,n8,n9]
                                    value = sum([digit_counts[i]*powers[i] for i in range(10)])
                                    value_digits = [int(c) for c in str(value)]
                                    value_counts = [0]*10
                                    for d in value_digits:
                                        value_counts[d] += 1
                                    if digit_counts == value_counts:
                                        print(value)
                                        exit()
                                    count +=1
                                    if count % 1000 == 0:
                                        print(count)

Neni to prilis elegantni, ale funguje.

Offline

 

#37 28. 11. 2023 21:11

check_drummer
Příspěvky: 4650
Reputace:   101 
 

Re: Jak vyřešit rovnici - příklad

↑ Stýv:
Dala by se udělat funkce s jedním for cyklem co se bude provolávat rekurzivně.


"Máte úhel beta." "No to nemám."

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson