W tym zadaniu musisz napisać program, który oblicza czynniki pierwsze liczby. Dane wejściowe to liczba naturalna 1 <n <2 ^ 32. Dane wyjściowe to lista głównych czynników liczby w następującym formacie. Wykładniki należy pominąć, jeśli są 1. Wyprowadzają tylko liczby pierwsze. (Zakładając, że dane wejściowe to 131784):
131784 = 2 ^ 3 * 3 * 17 ^ 2 * 19
Korzystanie z tej samej ilości białych znaków nie jest wymagane; w miarę potrzeby można wstawić spację. Twój program powinien zakończyć się w mniej niż 10 minut dla każdego wejścia. Wygrywa program z najkrótszą liczbą znaków.
code-golf
number-theory
primes
factoring
FUZxxl
źródło
źródło
Odpowiedzi:
SageMath, 31 bajtów
Przypadek testowy: wyniki
83891573479027823458394579234582347590825792034579235923475902312344444
:83891573479027823458394579234582347590825792034579235923475902312344444 = 2^2 * 3^2 * 89395597 * 98966790508447596609239 * 263396636003096040031295425789508274613
źródło
Ruby 1.9,
7470 znakówEdycje:
exponent > 1
źródło
Perl 5.10, 73
88Pobiera numer wejścia ze standardowego wejścia. Oblicza współczynniki dla wielu danych wejściowych, jeśli są podane.
Liczone jako różnica do
perl -e
. 5.10 jest potrzebne dla\K
metaznaku wyrażenia regularnego.źródło
factor
.p
opcji?split/\D/,~factor $_~;$_="@_";
pisać$_=~factor $_~;s/\D/ /g;
? (Oczywiście zamień~
na backtick.)$_=`factor $_`;s/\D/ /g;
? Pomaga podwójna obudowa wsteczna.OCaml, 201 znaków
Bezpośrednie tłumaczenie imperatywnego najlepszego kodu w języku Python:
Na przykład,
(zauważ, że pominąłem wypisywanie końcowego punktu końcowego). Dla zabawy, przy 213 znakach, wersja
czystofunkcjonalna, całkowicie zaciemniona przez swobodne użycie operatorów:źródło
Python,
140135133 znakówźródło
' * %d'
... I jeszcze dwie rzeczy65536 == 4**8
:; Linia 7:if e:s+='*%d'%f+'^%d'%e*(e>1)
J, 72
Typowy J. Dwie postacie do wykonania większości pracy, sześćdziesiąt postaci do przedstawienia.
Edycja: Naprawiono liczbę znaków.
źródło
161784
jest to twój wkład, nadal ma 72 znaki.|: __ q: y
?J,
5352 znakiTo rozwiązanie bierze
rplc
sztuczkę z rozwiązania randomra, ale zawiera też kilka oryginalnych pomysłów.W notacji niejawnej ta funkcja staje się
gdzie
g
jest zdefiniowane jakoq: y
jest wektorem czynniki pierwsze oy
. Na przykładq: 60
daje2 2 3 5
.x u/. y
stosuje sięu
doy
keyed przezx
, tou
znaczy stosuje się do wektorów elementów,y
dla których wpisyx
są równe. To jest trochę skomplikowane, aby wyjaśnić, a w szczególnym przypadkuy u/. y
lubu/.~ y
,u
stosuje się do każdego wektora odrębnych elementówy
, w których każdy element jest powtarzany tak często, jak to pojawia sięy
. Na przykład</.~ 1 2 1 2 3 1 2 2 3
daje# y
jest tally ofy
, czyli liczba elementów wy
.": y
formatyy
jako ciąg.x , y
dołączax
iy
.{. y
jest głowąy
, czyli jej pierwszym przedmiotem.(": {. y), '^' , (": # y) , '*'
formatuje wektor n powtórzeń liczby k na ciąg postaci k ^ n *. To wyrażenie w milczącej notacji to:@{.,'^','*',~":@#
, które przekazujemy do przysłówka/.
opisanego powyżej.x rplc y
to funkcja biblioteczna zastępująca znaki.y
ma kształta ; b
i każde wystąpienie łańcuchaa
wx
zastępujeb
.x
jest zniszczony (to znaczy przekształcony tak, że ma rangę 1) przed rozpoczęciem operacji, która jest tutaj używana. Ten kod zastępuje^1*
się znakiem*
zgodności z obowiązującym formatem wyjściowym.}: y
jest ograniczyć zy
, czyli wszystko, ale jego ostatni element. Służy do usuwania końcowego*
.źródło
__ q:
? Wypróbuj online!PHP, 112
118
źródło
Python 119 znaków
źródło
JavaScript,
124122119źródło
Perl, 78
Używa funkcji s /// r Perla 5.14, aby uniknąć ^ 1s. 81 znaków do uruchomienia w pętli:
źródło
PHP, 236 znaków
Wyjście dla 131784: 2 ^ 3 * 3 * 17 ^ 2 * 19
Wypełnia wszystkie liczby w ciągu kilku sekund podczas testowania.
Dane wejściowe nigdy nie zostały określone, dlatego zdecydowałem się wywołać je przy użyciu argumentów wiersza poleceń.
źródło
Scala 374:
bez golfa:
źródło
J, 74 znaki
64 znaki z wejściem w zmiennej
x
:źródło
3 : 0
definicji.3 : 0
wersji, ale to nie działało trochę. Może jednak spróbuję milczeć później. To jest 3: 0 próbowałem: pastebin.com/rmTVAk4j .y
tak, jak powinien?''
zamiasta:
w jednym miejscu. Może to różnica?Java 10,
109108 bajtów (funkcja lambda) (nie konkuruje na żądanie OP)Wypróbuj online.
Java 6+, 181 bajtów (pełny program)
Wypróbuj online.
-1 bajt dzięki @ceilingcat .
Wyjaśnienie:
źródło
Japt ,
282726 bajtów-1 bajt dzięki Shaggy
Spróbuj
źródło
PowerShell,
11397 bajtówZainspirowany Joey'a odpowiedź . Jest wolny, ale krótki.
Wyjaśniony skrypt testowy:
Wydajność:
źródło
Galaretka , 16 bajtów (nie konkuruje na życzenie OP)
Jedna z moich pierwszych odpowiedzi na żelki, więc zdecydowanie można grać w golfa (szczególnie
³”=³
) ..Wypróbuj online.
Wyjaśnienie:
źródło
(non-competing)
. :)05AB1E ,
2220 bajtów (nie konkuruje na wniosek OP)-2 bajty dzięki @Emigna .
Wypróbuj online.
Wyjaśnienie:
źródło
1K
powinien działać zamiast ≠ iy w pętli.APL (NARS), 66 znaków, 132 bajty
przetestuj i skomentuj:
jeśli ktoś ma wiele czasu z tymi prymitywami, zna je bardzo dobrze, dla mnie możliwe jest, że kod jest wyraźniejszy od komentarzy ... więc kod jest bardziej przejrzysty niż komentarze, komentarze nieprzydatne ...
źródło
JavaScript, 107
120
źródło
*
wynik i drukuje wykładnik wykładniczy, nawet jeśli*
zakłada mnożenie1
. Jeśli to tak duży problem, naprawię to.1
nie powinien być drukowany. I nie, ciągnięcie*
również jest temu przeciwne. Gdyby można swobodnie wybrać format wyjściowy, wówczasfactor(1)
najłatwiej byłoby go wykonać. Odpowiedzi można rozsądnie porównać tylko wtedy, gdy wszystkie rozwiązują ten sam problem.PHP , 112 bajtów
Wypróbuj online!
źródło
PHP, 93 bajty
Mógłbym zrobić 89 bajtów z PHP 5.5 (lub nowszym), ale to opóźnia wyzwanie o ponad 2 lata:
Uruchom jako potok z
-nF
lub wypróbuj je online .źródło