Czy można tak ustawić cyfry?
-
- Użytkownik
- Posty: 279
- Rejestracja: 16 lip 2015, o 11:21
- Płeć: Mężczyzna
- Lokalizacja: Lub
- Podziękował: 160 razy
- Pomógł: 21 razy
Czy można tak ustawić cyfry?
Czy można ustawić cyfry \(\displaystyle{ 5,6,7,8,9}\) tak, że utworzona w ten sposób liczba pięciocyfrowa będzie \(\displaystyle{ k}\) - potęgą liczby całkowitej, gdzie \(\displaystyle{ k>1}\) jest liczbą całkowitą?
- vpprof
- Użytkownik
- Posty: 492
- Rejestracja: 11 paź 2012, o 11:20
- Płeć: Mężczyzna
- Lokalizacja: Warszawa
- Podziękował: 26 razy
- Pomógł: 64 razy
Czy można tak ustawić cyfry?
Chyba jeszczeMedea 2 pisze:Mathematica, chociaż rozwiązanie spokojnie przepisałabym do czystego C. UżyłamTuples, IntegerQ
iSelect
, nic wymyślnego.
FromDigits
, co? - Medea 2
- Użytkownik
- Posty: 2491
- Rejestracja: 30 lis 2014, o 11:03
- Płeć: Kobieta
- Podziękował: 23 razy
- Pomógł: 479 razy
Czy można tak ustawić cyfry?
Owszem! W moim wcześniejszym rozwiązaniu ręcznie przeszukiwałam wykładniki do siedemnastki (bo \(\displaystyle{ 2^{17}>99999}\)), ale to nie było najmądrzejsze posunięcie. Liczb do sprawdzenia dużo tu nie ma, więc wygodniej używa się takiego kodu:
Kod: Zaznacz cały
Select[Map[{GCD@@Transpose[FactorInteger[#]][[2]],#}&,FromDigits/@Tuples[Range[5,9],5]],#[[1]]>1&]
- vpprof
- Użytkownik
- Posty: 492
- Rejestracja: 11 paź 2012, o 11:20
- Płeć: Mężczyzna
- Lokalizacja: Warszawa
- Podziękował: 26 razy
- Pomógł: 64 razy
Czy można tak ustawić cyfry?
No właśnie ja też przeszukiwałem ręcznie wykładniki, ostatecznie zrobiłem tabelkę:
Twoje rozwiązanie Medea_2 jest ładne, ale zauważ, że dla sześciocyfrowych kombinacji wyrzuca jeden sześcian pomiędzy kwadratami, co jest mniej czytelne
EDIT: Chociaż z drugiej strony, jest ono na pewno szybsze, bo przebiega cały zbiór liczb tylko raz.
Kod: Zaznacz cały
IleCyfr := 5
Table[{{"Wykładnik=" <> ToString[n]},
{Select[FromDigits[#] & /@ Tuples[Range[5, 9], IleCyfr],
IntegerQ[#^(1/n)] &]}},
{n, 2, IntegerPart[Log[2, 10^IleCyfr]]}] // TableForm
EDIT: Chociaż z drugiej strony, jest ono na pewno szybsze, bo przebiega cały zbiór liczb tylko raz.
- Medea 2
- Użytkownik
- Posty: 2491
- Rejestracja: 30 lis 2014, o 11:03
- Płeć: Kobieta
- Podziękował: 23 razy
- Pomógł: 479 razy
Czy można tak ustawić cyfry?
Nawet jeżeli wyrzuca sześcian, to mówi o tym - w ostateczności można dodać sortowanie na koniec. Twoje rozwiązanie wykonuje się ponad sekundę, moje (powyższe) jest cztery, pięć razy szybsze. Niżej dodaję jeszcze szybsze, ale teraz nie wiadomo, o jaki wykładnik chodzi (wykonuje się tak prędko, że nie jestem w stanie zmierzyć tego):
Wyjaśniam z góry, że \(\displaystyle{ 17}\) to logarytm \(\displaystyle{ \log_2 99999}\) po zaokrągleniu.
Kod: Zaznacz cały
Select[Flatten[Table[Select[Range[2, Floor[99999^(1/k)] + 1]^k, # >= 55555 &], {k, 2, 17}]], Min[IntegerDigits[#]] >= 5 &]