În onoarea Zilei Pi (14 martie), vă ofer următoarele: Oare fiecare șir finit de numere, cum ar fi numărul dvs. de securitate socială, apare în cele din urmă undeva în expansiunea zecimală a lui π?
Așa a spus Harold Finch, geniul computerelor la emisiunea TV „Persoana de interes” („Ești urmărit…”) într-un episod din 2013 în care se prezintă ca profesor suplinitor de matematică de liceu.
„Pi… continuă, pentru totdeauna, fără să se repete vreodată. Ceea ce înseamnă că conținutul în acest șir de zecimale este fiecare alt număr. Data nașterii, combinația cu dulapul tău, numărul tău de securitate socială, totul este acolo, undeva. Și dacă transformi aceste zecimale în litere, ai avea fiecare cuvânt care a existat vreodată… toate posibilitățile infinite ale lumii se află în acest cerc simplu.”
Știm că π este iraţional; nu poate fi exprimat ca câtul a două numere întregi. Video
Un număr irațional are o expansiune zecimală infinită, care nu se repetă.
Un număr este definit ca normal dacă orice șir finit de numere precum numărul dvs. de securitate socială va apărea în cele din urmă undeva în expansiunea sa zecimală. (Este o versiune mai simplă a unei definiții matematice mai complicate, dar este suficientă pentru această discuție.) Domnul Finch susține că π este un număr normal. Cu toate acestea, matematicienii nu au demonstrat încă acest lucru. (Am încercat odată să adaug această ultimă afirmație și faptul că Finch a greșit, la pagina Persoană de interes a Wikipedia, dar editorii Wikipedia au refuzat-o.)
Deși π este definit geometric ca raportul dintre circumferința unui cerc și diametrul acestuia, matematicienii calculează secvențe lungi de π folosind serii infinite, mai degrabă decât măsurători fizice. Diverse site-uri web, cum ar fi angio, furnizează fișiere care conțin până la 1 milion de cifre de π.
Am scris un cod R care să ia un număr (sau un cuvânt, convertit într-un număr) și să caut unde ar putea fi găsit acel număr în π. Am decis că primele 100.000 de cifre ale lui π sunt suficiente pentru mine. Desigur, faptul că un număr nu poate fi găsit în primele 100.000 de cifre, nu exclude ca acesta să fie găsit în următoarele 100.000 de cifre, sau în următorul 1 milion de cifre. Și așa mai departe. Multe cifre continuă pentru o lungă perioadă de timp.
Am testat aceste exemple:
- „Ouă”. e = 5, g = 7, g = 7, s = 19. 57719 apare începând cu a 6026-a cifră a lui π.
- „0123” apare începând cu a 27846-a cifră a lui π.
- „01234567” nu a fost găsit în primele 100.000 de cifre. Dar, conform paginii de căutare Pi, acesta poate fi găsit începând cu cifra 112.099.767.
Nu am încercat „0123456789”, dar o altă sursă spune că nu a fost găsit în primele 2 miliarde de cifre.
Aici este codul meu R. Ziua Pi fericită!
# Symbol for pi is u03c0
library(stringr)
library(readr)
find_in_pi <- function(input_value) {
# 1. Load the Pi data
data.raw <- readr::read_file("https://assets.angio.net/100000.txt")
data.vec <- unlist(str_split(data.raw, pattern = ""))
data.vec <- data.vec(-c(1, 2)) # remove '3.'
pi_string <- paste(as.character(data.vec), collapse = "")
# 2. Process Input: Determine if it's a word or a numeric string
# Convert to character and lowercase for uniformity
clean_input <- tolower(as.character(input_value))
if (grepl("(a-z)", clean_input)) {
# It's a word: Convert letters to numbers (1-26)
word_only <- gsub("(^a-z)", "", clean_input)
z <- unlist(str_split(word_only, ""))
q <- match(z, letters)
search_target <- paste(q, collapse = "")
} else {
# It's already a number: Just strip non-digits (like decimals or spaces)
search_target <- gsub("(^0-9)", "", clean_input)
}
# 3. Search Pi
pos <- regexpr(search_target, pi_string)
# 4. Handle Results
if (pos(1) == -1) {
return(paste0("The sequence '", search_target, "' was not found in the first 100k digits."))
} else {
start <- pos(1)
end <- start + nchar(search_target) - 1
return(list(
found = search_target,
start_index = start,
end_index = end,
index_sequence = seq(from = start, to = end)
))
}
}
# Search for a word
find_in_pi("Eggs")
# Search for a number; enclose in quotes if a leading zero
find_in_pi("01234")
find_in_pi("01234567")
Sfârşit
