Znajdowanie 10-cyfrowych liczb pierwszych

Znajdowanie 10-cyfrowych liczb pierwszych
XA
  • Rejestracja:ponad 9 lat
  • Ostatnio:12 miesięcy
  • Postów:35
0

Witam,

Mam takie zadanie do rozwiązania:

Liczba pierwsza jest hiperszczęśliwa, jeżeli zawiera co najmniej 7 siódemek pod rząd. Napisz program, który wypisuje największą dziesięcocyfrową hiperszczęśliwą liczbę pierwszą. Postaraj się, by Twój program można było łatwo zastosować w innym, po dobnym zadaniu (przy innej liczbie cyfr i innej liczbie siódemek czyniących liczbę hiperszczęśliwą). Program powinien zakończyć działanie w kilkanaście sekund.

I nie wiem do końca jak znajdować te 10 cyfrowe liczby pierwsze tak żeby nie przekroczyć czasu na wykonanie zadania. Jaka będzie najszybsza metoda znajdowania 10 cyfrowych liczb pierwszych.

edytowany 1x, ostatnio: flowCRANE
spartanPAGE
  • Rejestracja:prawie 12 lat
  • Ostatnio:około 18 godzin
0

Przygotuj sobie wcześniej zestaw liczb pierwszych zawierających siódemki. Z takim gotowym zestawem danych odnalezienie "najfajniejszej" to pikuś.

XA
  • Rejestracja:ponad 9 lat
  • Ostatnio:12 miesięcy
  • Postów:35
0

Więc najlepiej będzie znaleźć te liczby pierwsze sitem Eratostenesa, następnie sprawdzenie czy mają 7 i potem wyszukanie największej?

spartanPAGE
  • Rejestracja:prawie 12 lat
  • Ostatnio:około 18 godzin
0

Czym sobie znajdziesz to absolutnie nie jest ważne.
Cały trick polega na tym, żebyś w swoim kodzie szukającym hiperszczęśliwych liczb miał >gotowy< (wcześniej przygotowany) zbiór liczb pierwszych.
coś w rodzaju primes = [ danych w cholere ]

Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
5

Ja bym jednak sprawdzał czy kolejne duże liczby z siedmioma 7 pod rząd są pierwsze czy nie.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
Zobacz pozostałe 2 komentarze
Shalom
@bogdans jeszcze można by puscić szybko jakis probabilistyczny test żeby sobie odsiać prawie wszystkie nie-pierwsze z tych liczb z 7 a dopiero te kilka które zostały porządnie przetestować ;)
XA
@Shalom A te liczby z z siedmioma siódemkami sprawdzać zwykłym algorytmem na liczbę pierwszą tj od 2 do pierwiastka z tej liczby, czy jest jakaś wydajniejsza opcja?
Shalom
Ja bym najpierw odpalił probabilistyczną próbę, choćby test Fermata albo Millera-Rabina, bo wtedy w kilku iteracjach szybko odsiejesz liczby które na pewno są złożone a dopiero na tym co zostanie możesz zrobić pełny test pierwszości. W ten sposób będzie to wielokrotnie szybsze.
XA
Dzięki bardzo za rady.
hauleth
Zawsze można też stablicować wszystkie liczby pierwsze do 99 999. Powinno być ich mniej niż 9000 więc dalej znośna ilość.
XA
  • Rejestracja:ponad 9 lat
  • Ostatnio:12 miesięcy
  • Postów:35
0

Udało mi się napisać coś takiego lecz program nadal jest zbyt wolny proszę o jakieś rady jak go poprawić.

Kopiuj
from math import sqrt
import random
 
def fermat(k, p):
    i = 0
    while i < k:
        a = random.randint(1, p - 1)
        if pow(a, (p - 1), p) == 1:
            i = i + 1
        else:
            return False
    return True

def prime(n):
    i = 2
    while i*i <= n:
        if n % i == 0:
            return False
            break
        i += 1
    return True

counter = 0

for i in range(9999999999, 1000000000, -2):
    if '7777777' in str(i):
        if fermat(5,i):
            if prime(i):
                
                counter += 1
            
        

Program powinien zwrócić odpowiedź w kilka(dziesiąt) sekund, mam wypisać ile jest takich liczb 10-cyfrowych hiperszczęśliwych.

Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0

Panie, fermata tu wrzuciłeś a dalej szukasz dzielników wśród liczb parzystych? :D I sprawdzasz też liczby parzyste jako potencjalnie pierwsze? o_O Litości!
Proponowałbym jednak dorzucić tam sito żeby nie marnować czasu na liczby które ewidentnie nie są pierwsze.

No i wiesz że python to nie jest demon szybkości? Odpal to pod PyPy jeśli już chcesz w pythonie. Ale przepisanie tego do C spowoduje pewnie przyspieszenie przynajmniej 10 razy? Ale najpierw popraw ten algorytm...


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
edytowany 2x, ostatnio: Shalom
XA
Małe niedopatrzenie ale to nadal nie zmienia tego, że program się długo wykonuje.
Shalom
Odrzucenie parzystych to już 2 razy szybciej. Odrzucenie wielokrotności 3 znów dość sporo.
XA
Parzystych nie sprawdzałem iteracja idzie o 2 w dół. Czyli mam jeszcze sprawdzić wielokrotności 3, 5, 7, 11, 13 i jakich jeszcze? Mozę i w C by było to szybsze lecz zadanie mam rozwiązać w pythonie i musi on zakończyć się w w kilka(dziesiąt) sekund.
XA
  • Rejestracja:ponad 9 lat
  • Ostatnio:12 miesięcy
  • Postów:35
0

Rozwiąż wariant zadania z liczbami hiperszczęśliwymi. W tym wariancie nie interesuje nas największa liczba hiperszczęśliwa, lecz to, ile jest 10-cyfrowych liczb
pierwszych hiperszczęśliwych. Program powinien zwrócić odpowiedź w kilka(dziesiąt) sekund.

Po zalecanych modyfikacjach wykonanie programu trwa około 40 min, więc dużo dużo za wolno. W zadaniu jest napisane, że ma to trwać kilkadziesiąt sekund, więc może jest jakiś inny szybszy sposób na rozwiązanie tego zadania? Znalazłem 203 takie liczby. Aktualny kod wygląda tak:

Kopiuj
from math import sqrt
import random
 
def fermat(k, p):
    i = 0
    while i < k:
        a = random.randint(1, p - 1)
        if pow(a, (p - 1), p) == 1:
            i = i + 1
        else:
            return False
    return True

def prime(n):
    i = 3
    while i*i <= n:
        if n % i == 0:
            return False
            break
        i += 2
    return True

counter = 0

for i in range(9999999999, 1000000000, -2):
    if '7777777' in str(i) and i % 3 != 0 and i % 5 != 0 and i % 7 != 0:
        if fermat(5,i):
            if prime(i):
                counter += 1
            
print(counter)

edytowany 3x, ostatnio: xarix
SI
  • Rejestracja:prawie 14 lat
  • Ostatnio:około 4 godziny
0

Ciągle nie ma "sita" a takowe dało by programowi prawdziwego kopa.

XA
@sig możesz powiedzieć w jaki sposób mam wykorzystać sito?
Shalom
Za duży zakres na sito, poza tym moim zdaniem nie ma sensu, bo już od samego początku tego tematu sugerowałem żeby testować tylko duże liczby z samymi 7 ;] Weź pod uwagę że to są liczby 10 cyfrowe więc już samo sito musiałoby mieć 100 mld elementów ;) To nawet na bitach nie wejdzie ;)
SI
pierwiastek z jedynki i 10 zer (czyli liczby o jeden większej niż maksimum) to 100000, pierwsze do tej wartości by starczyły do szybkiego sprawdzenia liczb z wystarczającą liczbą siódemek. Wspomniana tablica pierwszych liczy się u mnie w ułamku sekundy
Shalom
@sig ty chyba nie bardzo wiesz jak działa sito o_O To co napisałeś nie ma zupełnie sensu. Tyle to jest potencjalnych dzielników, ale to ci przecież zupełnie nic nie daje...
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0

o_O ale przecież ty masz znaleźć pierwszą, bo największą. U mine na pypy to działa praktycznie momentalnie:

Kopiuj
import random

import itertools
import timeit


def fermat(k, p):
    for i in range(k):
        a = random.randint(1, p - 1)
        if pow(a, (p - 1), p) != 1:
            return False
    return True


def prime(n):
    i = 3
    while i * i <= n:
        if n % i == 0:
            return False
        i += 2
    return True


def main():
    for i in itertools.count(9999999999, -2):
        if i < 1000000000L:
            break
        if '7777777' in str(i) and i % 3 != 0 and i % 5 != 0 and i % 7 != 0:
            if fermat(5, i) and prime(i):
                print i
                break


main()

Rozumiesz w ogóle polecenie tego zadania?

4.5 sek na Cpythonie, 2.5sek na PyPy.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
edytowany 2x, ostatnio: Shalom
Zobacz pozostały 1 komentarz
Shalom
Ty jesteś poważny? To jak ty oczekujesz jakiejś sensownej porady skoro chcesz rozwiazać inne zadanie niż opisałeś? o_O
XA
Różnica jest tylko taka że zamiast znaleźć największą mam znaleźć wszystkie liczby hiperszczęśliwe.
Shalom
No ale to teraz jest różnica jak między piciem w szczawnicy a szczaniem w piwnicy bo podejscie do takiego zadania jest zupełnie inne ;]
XA
Ok mój błąd myślałem, że różnica jest mała i będzie podobny sposób rozwiązania. Mógłbyś dać jakieś rady jak się do tego zabrać.
Shalom
Zacznij od sensownego generowania liczb do testów. Tych liczb z 7 jest stosunkowo mało a samo to iterowanie zjada kupę czasu wbrew pozorom. Pomyśl jak zrobić to za pomocą prefixu i suffixu.
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
1

Znaj moją łaskawość, bo zadanie ciekawe:

Kopiuj
import random
import itertools
import timeit


def fermat(k, p):
    for i in range(k):
        a = random.randint(1, p - 1)
        if pow(a, (p - 1), p) != 1:
            return False
    return True


def prime(n):
    i = 3
    while i * i <= n:
        if n % i == 0:
            return False
        i += 2
    return True


def generate_data():
    mid = '7777777'
    prefix_len = 0
    suffix_len = 3
    data = set()
    while suffix_len >= 0:
        prefixes = ["".join([str(x) for x in p]) for p in itertools.product(range(10), repeat=prefix_len) if
                    p and p[0] != 0]
        if not prefixes:
            prefixes = ['']
        suffixes = ["".join([str(x) for x in s]) for s in itertools.product(range(10), repeat=suffix_len)]
        for prefix in prefixes:
            for suffix in suffixes:
                n = int(prefix + mid + suffix)
                data.add(n)
        suffix_len -= 1
        prefix_len += 1
    return data


def main():
    counter = 0
    for i in generate_data():
        if fermat(5, i) and prime(i):
            # print('found number', i)
            counter += 1
    print(counter)


main()
# print(timeit.timeit("main()", number=1))

2s na PyPy, 4.5s na Cpythonie.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
edytowany 2x, ostatnio: Shalom
XA
Sam teraz robię generacje tych liczb ale dzięki za pomoc.
Shalom
No jak już ci zasugerowałem jak to zrobić to żadna sztuka ;)
XA
Trochę w tym racji ale nie wiem czy wpadłbym na to rozwiązania (na czwartek muszę je zrobić), dalej pisząc to czegoś się nauczę. Jak widać sporo przede mną aby umieć coś sensownego tworzyć.
SI
  • Rejestracja:prawie 14 lat
  • Ostatnio:około 4 godziny
0

Dość prymitywny program z "sitem", 12s

Kopiuj
tab = [2, 3, 5]

def czypierw(liczba):
	for pierwsza in tab:
		if pierwsza * pierwsza > liczba:
			tab.append(liczba)
			return True
		if liczba % pierwsza == 0:
			return False
	tab.append(liczba)
	return True


for i in range(7, 100000):
	czypierw(i)


baza = "7777777"
for i in range(10000000000, 999999999, -1):
	if baza in str(i):
		if czypierw(i) is True:
			print(i)
			break
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0

@sig ech po pierwsze to autor rozwiązuje teraz zupełnie inny problem. Po drugie rozwiązanie które proponowałem wcześniej działa w ~2s. No i to co napisałeś to wcale nie jest sito tylko trochę ulepszone trial-division bo dzielisz tylko przez dzielniki będące liczbami pierwszymi w danym zakresie. Obok sita to nawet nie leżało ;] Ba, ty nawet sita nie użyłeś do wyznaczenia tego zbioru potencjalnych dzielników, a akurat by się nadało do tego ;]


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
edytowany 4x, ostatnio: Shalom
bogdans
Moderator
  • Rejestracja:ponad 16 lat
  • Ostatnio:prawie 5 lat
1

Ja bym generował tak:

Kopiuj
def generate_data():
    data = set()
    for sufix in range(1000):
        data.add(7777777000 + sufix)
    for sufix in range(100):
        for prefix in range(1,10):
            data.add(prefix*1000000000 + 777777700 + sufix)
    for sufix in range(10):
        for prefix in range(10,100):
            data.add(prefix*100000000 + 77777770 + sufix)
    for prefix in range(100,1000):
        data.add(prefix*10000000 + 7777777)
return data

Zmienna data zawiera 3420 liczb, u @Shalom`a jest 3700 (bo są powtórzenia), czas wykonania mojego kodu jest minimalnie krótszy.
Wersja zmodyfikowana, łatwiejsza do adaptacji:

Kopiuj
data = set()
middle = 7777777
prefix_len = 0
suffix_len = 3

while suffix_len >= 0:
    base = middle*(10**suffix_len)
    power = (10**(10 - prefix_len))
    for sufix in range(10**suffix_len):       
        for prefix in range(int(10**(prefix_len - 1)),int(10**prefix_len)):
            data.add(prefix*power + base + sufix)
    suffix_len-=1
    prefix_len+=1

To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
edytowany 4x, ostatnio: bogdans
Shalom
Jedyny plus mojej wersji to to, ze można ją łatwo zaadaptować do innej długości prefixu/suffixu, ale trace tam jeszcze trochę na tych konwersjach int/string.
bogdans
Moją wersję (po drobnej modyfikacji) też się łatwo adaptuje.
Shalom
teraz twój generator mi się podoba ;)
bogdans
to jest nas już dwóch ;)
SI
  • Rejestracja:prawie 14 lat
  • Ostatnio:około 4 godziny
0

Poniżej sekundy, ale mam jakiegoś buga w generatorze liczb z siódemkami (niektóre mają o jedną cyfrę za mało)

Kopiuj
import math

ilecyfr = 10
ilesiod = 7

tab = [2, 3, 5]


def czypierw(liczba):
	for pierwsza in tab:
		if pierwsza * pierwsza > liczba:
			tab.append(liczba)
			return True
		if liczba % pierwsza == 0:
			return False
	tab.append(liczba)
	return True

reszta = ilecyfr - ilesiod
maxzak = int("9" * reszta) + 1
minzak = int("1" + "0" * (reszta - 1))
pierw = int(math.ceil(math.sqrt(maxzak)) + 1)
wynik = 0

for i in range(7, pierw):
	czypierw(i)


baza = ilesiod * "7"
for liczba in range(minzak, maxzak):
	liczba = str(liczba)
	for i in range(len(liczba)):
		tymcz = int(liczba[i:] + baza + liczba[:i])
		if czypierw(tymcz):
			if tymcz > wynik:
				wynik = tymcz

print(wynik)


edytowany 3x, ostatnio: sig
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0

@sig nadal nie przeczytałeś drugiego polecenia. Akurat znaleźć największą liczbę to nie problem bo wystarczyłoby lecieć od max do min i wybrać pierwszą znalezioną. Nie wiem po co przelgądasz wszystkie. No i tyle było pisania o tym sicie :P Mogłeś sobie tą tablicę tab[] policzyc sitem właśnie ;)

BTW nie wiem czy wiecie ale operacje na zmiennych globalnych są dużo wolniejsze niz na lokalnych. Wrzućcie to sobie wszystko do funkcji i będzie jeszcze szybciej.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
SI
  • Rejestracja:prawie 14 lat
  • Ostatnio:około 4 godziny
0

Przystosowanie dla innej ilości cyfr w liczbie i siódemek załatwiają 2 pierwsze zmienne z main-a (wcześniej były globalnymi), a sprawdzam wszystkie bo moim zdaniem w innym przypadku generator byłby przekombinowany. Trzeba by osobno rozważać "dodatek" z cyfr mniejszych i większych od siódemki (w zależności od tego większe były by z siódemkami wcześniej albo dalej). Oto obecny kod z funkcjami. Żadnych dodatkowych zaleceń mam nadzieję nie przegapiłem.

Kopiuj
import math


def generuj(minzak, maxzak, ilesiod):
	baza = ilesiod * "7"
	for liczba in range(minzak, maxzak):
		liczba = str(liczba)
		for i in range(len(liczba)):
			tymcz = int(liczba[i:] + baza + liczba[:i])
			yield(tymcz)


def czypierw(liczba):
	tab = [2, 3, 5]
	for pierwsza in tab:
		if pierwsza * pierwsza > liczba:
			tab.append(liczba)
			return True
		if liczba % pierwsza == 0:
			return False
	tab.append(liczba)
	return True


def main():
	ilecyfr = 10
	ilesiod = 7
	reszta = ilecyfr - ilesiod
	maxzak = int("9" * reszta) + 1
	minzak = int("1" + "0" * (reszta - 1))
	pierw = int(math.ceil(math.sqrt(maxzak)) + 1)
	wynik = 0

	for i in range(7, pierw):
		czypierw(i)
	for liczba in generuj(minzak, maxzak, ilesiod):
		if czypierw(liczba):
			if liczba > wynik:
				wynik = liczba
	print(wynik)

main()

ps próbowałem zrobić osobną funkcję dla sprawdzenia czy liczba jest pierwsza, ale dodanie tab-a do jednej sprawdzającej przyśpiesza program względem 2 i globalnej listy tab.

Shalom
Przegapiłeś główne założenie -> ''W tym wariancie nie interesuje nas największa liczba hiperszczęśliwa, lecz to, ile jest 10-cyfrowych liczb pierwszych hiperszczęśliwych'' ;)
bogdans
Moderator
  • Rejestracja:ponad 16 lat
  • Ostatnio:prawie 5 lat
0

a sprawdzam wszystkie bo moim zdaniem w innym przypadku generator byłby przekombinowany. Trzeba by osobno rozważać "dodatek" z cyfr mniejszych i większych od siódemki (w zależności od tego większe były by z siódemkami wcześniej albo dalej).

Rzeczywiście, dopisanie na końcu instrukcji

Kopiuj
sortedData = sorted(data)

bardzo "przekombinowuje" generator.


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
Shalom
No trzeba posortować te 3.5k liczb! ;)
0

Dzień dobry,
@Shalom sprawdziłem Twój kod (ostatnia odpowiedź na pierwszej stronie) na liczenie ile jest tych 10-cyfrowych liczb hiperszczęśliwych (po wyniku sądzę, że to właśnie do tego drugiego zadania program),
w moim programie jest dokładnie ten sam wynik-225(1.6s), ale mam problem z powtarzającym się sprawdzaniem liczb które mają w sobie więcej niż 7 siódemek - ale nie o mój kod mi chodzi, bo to jest jeszcze do poprawienia, otóż drugi program - mniej sprytny - działa 46minut ale wypisuje wynik 203.. Wydaje mi się, że to jednak 203 jest bliżej prawdy, więc chciałem Cię spytać, czy jesteś pewny wyniku w swoim programie?

Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0

@Mariusz B. jest ich 203, poniżej @bogdans przecież wspomniał że niepotrzebnie miałem tam powtórzenia przy generacji danych. Anyway, poprawiłem ten kod żeby ktoś się znów tak nie pomylił ;]


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)