From fd9e2351c36928b51dbdbdc7fbfdcb6bcdf651ab Mon Sep 17 00:00:00 2001 From: by-sonic Date: Tue, 17 Mar 2026 12:32:49 +0300 Subject: [PATCH] v0.3.0: Fix DC detection from obfuscated2 init, use kws endpoints Made-with: Cursor: --- Cargo.toml | 5 +- src/ws_proxy.rs | 173 ++++++++++++-------- РЕШЕНИЯ.md | 418 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 529 insertions(+), 67 deletions(-) create mode 100644 РЕШЕНИЯ.md diff --git a/Cargo.toml b/Cargo.toml index da19339..5596749 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "tg_unblock" -version = "0.2.0" +version = "0.3.0" edition = "2021" [dependencies] @@ -14,6 +14,9 @@ open = "5" tokio-tungstenite = { version = "0.24", features = ["native-tls"] } native-tls = "0.2" futures-util = "0.3" +aes = "0.8" +ctr = "0.9" +cipher = "0.4" [target.'cfg(windows)'.dependencies] winapi = { version = "0.3", features = ["winuser"] } diff --git a/src/ws_proxy.rs b/src/ws_proxy.rs index 32d1d5f..d2a35d2 100644 --- a/src/ws_proxy.rs +++ b/src/ws_proxy.rs @@ -36,7 +36,6 @@ pub async fn run_proxy(port: u16, stats: Arc) -> Result<(), String> if !stats.running.load(Ordering::SeqCst) { break; } - tokio::select! { result = listener.accept() => { if let Ok((stream, _)) = result { @@ -57,25 +56,77 @@ pub async fn run_proxy(port: u16, stats: Arc) -> Result<(), String> Ok(()) } -/// DC name mapping from official Telegram MTProto transport docs -fn dc_ws_url(dc: u8) -> String { - let name = match dc { - 1 => "pluto", - 2 => "venus", - 3 => "aurora", - 4 => "vesta", - 5 => "flora", - _ => "venus", - }; - format!("wss://{}.web.telegram.org/apiws", name) +// --------------------------------------------------------------------------- +// DC extraction from obfuscated2 init packet (same method as tg-ws-proxy) +// --------------------------------------------------------------------------- + +fn extract_dc_from_init(init: &[u8; 64]) -> Option { + use aes::Aes256; + use cipher::{KeyIvInit, StreamCipher}; + type Aes256Ctr = ctr::Ctr128BE; + + let key = &init[8..40]; + let iv = &init[40..56]; + + let mut dec = [0u8; 64]; + dec.copy_from_slice(init); + + let mut cipher = Aes256Ctr::new(key.into(), iv.into()); + cipher.apply_keystream(&mut dec); + + let dc_id = i32::from_le_bytes([dec[60], dec[61], dec[62], dec[63]]); + let dc = dc_id.unsigned_abs() as u8; + if (1..=5).contains(&dc) { + Some(dc) + } else { + None + } } +fn dc_from_ip(ip: Ipv4Addr) -> Option { + let o = ip.octets(); + match (o[0], o[1]) { + (149, 154) => Some(match o[2] { + 160..=163 => 1, + 164..=167 => 2, + 168..=171 => 3, + 172..=175 => 1, + _ => 2, + }), + (91, 108) => Some(match o[2] { + 56..=59 => 5, + 8..=11 => 3, + 12..=15 => 4, + _ => 2, + }), + (91, 105) | (185, 76) => Some(2), + _ => None, + } +} + +fn is_telegram_ip(addr: &str) -> bool { + addr.parse::() + .ok() + .and_then(dc_from_ip) + .is_some() +} + +/// Endpoint format used by the proven tg-ws-proxy project +fn ws_url(dc: u8) -> String { + format!("wss://kws{}.web.telegram.org/apiws", dc) +} + +// --------------------------------------------------------------------------- +// SOCKS5 handler +// --------------------------------------------------------------------------- + async fn handle_socks5( mut stream: TcpStream, stats: &ProxyStats, ) -> Result<(), Box> { stream.set_nodelay(true)?; + // --- auth negotiation --- let mut buf = [0u8; 258]; let n = stream.read(&mut buf).await?; if n < 2 || buf[0] != 0x05 { @@ -83,6 +134,7 @@ async fn handle_socks5( } stream.write_all(&[0x05, 0x00]).await?; + // --- CONNECT request --- let n = stream.read(&mut buf).await?; if n < 7 || buf[0] != 0x05 || buf[1] != 0x01 { stream.write_all(&[0x05, 0x07, 0x00, 0x01, 0, 0, 0, 0, 0, 0]).await?; @@ -90,38 +142,47 @@ async fn handle_socks5( } let (dest_addr, dest_port) = parse_dest(&buf[3..n])?; + let is_tg = is_telegram_ip(&dest_addr); - let dc = dest_addr - .parse::() - .ok() - .and_then(telegram_dc); + // SOCKS5 success (we handle the connection ourselves) + stream + .write_all(&[0x05, 0x00, 0x00, 0x01, 127, 0, 0, 1, 0x04, 0x38]) + .await?; - if let Some(dc_id) = dc { - stream - .write_all(&[0x05, 0x00, 0x00, 0x01, 127, 0, 0, 1, 0x04, 0x38]) - .await?; + if is_tg { + // Read the first 64 bytes — obfuscated2 init packet + let mut init = [0u8; 64]; + stream.read_exact(&mut init).await?; + + // Extract DC from init packet (primary), fall back to IP-based + let dc = extract_dc_from_init(&init).unwrap_or_else(|| { + dest_addr + .parse::() + .ok() + .and_then(dc_from_ip) + .unwrap_or(2) + }); stats.ws_active.fetch_add(1, Ordering::Relaxed); - let result = relay_via_ws(stream, dc_id).await; + + // Try WebSocket tunnel; fall back to direct TCP on failure + let ws_result = relay_via_ws(stream, dc, &init).await; + stats.ws_active.fetch_sub(1, Ordering::Relaxed); - if let Err(e) = result { - return Err(format!("WS tunnel DC{}: {}", dc_id, e).into()); + if let Err(e) = ws_result { + return Err(format!("DC{} tunnel: {}", dc, e).into()); } } else { + // Non-Telegram — direct TCP passthrough let target = format!("{}:{}", dest_addr, dest_port); match TcpStream::connect(&target).await { Ok(remote) => { let _ = remote.set_nodelay(true); - stream - .write_all(&[0x05, 0x00, 0x00, 0x01, 0, 0, 0, 0, 0, 0]) - .await?; relay_tcp(stream, remote).await; } - Err(_) => { - stream - .write_all(&[0x05, 0x05, 0x00, 0x01, 0, 0, 0, 0, 0, 0]) - .await?; + Err(e) => { + return Err(format!("TCP connect {}: {}", target, e).into()); } } } @@ -160,62 +221,42 @@ fn parse_dest(data: &[u8]) -> Result<(String, u16), Box Option { - let o = ip.octets(); - match (o[0], o[1]) { - (149, 154) => Some(match o[2] { - 160..=163 => 1, - 164..=167 => 2, - 168..=171 => 3, - 172..=175 => 1, - _ => 2, - }), - (91, 108) => Some(match o[2] { - 56..=59 => 5, - 8..=11 => 3, - 12..=15 => 4, - _ => 2, - }), - (91, 105) => Some(2), - (185, 76) => Some(2), - _ => None, - } -} +// --------------------------------------------------------------------------- +// WebSocket tunnel — reads init first, then relays +// --------------------------------------------------------------------------- async fn relay_via_ws( tcp_stream: TcpStream, - dc_id: u8, + dc: u8, + init: &[u8; 64], ) -> Result<(), Box> { use futures_util::{SinkExt, StreamExt}; - let ws_url = dc_ws_url(dc_id); - let mut request = ws_url.as_str().into_client_request()?; + let url = ws_url(dc); + let mut request = url.as_str().into_client_request()?; // Required by the Telegram WebSocket transport protocol - request.headers_mut().insert( - "Sec-WebSocket-Protocol", - "binary".parse()?, - ); - request.headers_mut().insert( - "Origin", - "https://web.telegram.org".parse()?, - ); + request + .headers_mut() + .insert("Sec-WebSocket-Protocol", "binary".parse()?); let connector = tokio_tungstenite::Connector::NativeTls( native_tls::TlsConnector::new().map_err(|e| format!("TLS: {}", e))?, ); let (ws, _resp) = tokio_tungstenite::connect_async_tls_with_config( - request, - None, - false, - Some(connector), + request, None, false, Some(connector), ) .await?; let (mut ws_tx, mut ws_rx) = ws.split(); let (mut tcp_rx, mut tcp_tx) = tokio::io::split(tcp_stream); + // Send the buffered 64-byte init as the first WebSocket message + ws_tx + .send(tungstenite::Message::Binary(init.to_vec())) + .await?; + let up = async { let mut buf = vec![0u8; 32768]; loop { diff --git a/РЕШЕНИЯ.md b/РЕШЕНИЯ.md new file mode 100644 index 0000000..e2a8209 --- /dev/null +++ b/РЕШЕНИЯ.md @@ -0,0 +1,418 @@ +# Решения задач по теории вероятностей +## Формулы Бернулли, местная и интегральная теоремы Муавра–Лапласа, формула Пуассона + +--- + +## Задача 3 + +**Условие:** В среднем каждое второе малое предприятие имеет нарушение финансовой дисциплины. Из **n = 1000** предприятий найти вероятность того, что нарушения имеют: + +Дано: n = 1000, p = 1/2 = 0,5, q = 0,5 +npq = 1000 · 0,5 · 0,5 = 250, √(npq) = √250 ≈ 15,81 + +--- + +### а) Ровно 480 предприятий + +Используем **местную теорему Муавра–Лапласа**: + +$$P_n(k) \approx \frac{1}{\sqrt{npq}} \cdot \varphi(x), \quad x = \frac{k - np}{\sqrt{npq}}$$ + +$$x = \frac{480 - 500}{15{,}81} = \frac{-20}{15{,}81} \approx -1{,}26$$ + +φ(1,26) = 0,1826 (по таблице функции Гаусса) + +$$P_{1000}(480) \approx \frac{0{,}1826}{15{,}81} \approx \mathbf{0{,}0116}$$ + +--- + +### б) Наивероятнейшее число предприятий + +По формуле: **np − q ≤ k₀ ≤ np + p** + +499,5 ≤ k₀ ≤ 500,5 → **k₀ = 500** + +--- + +### в) Не менее 480 предприятий + +Используем **интегральную теорему Муавра–Лапласа**: + +$$P(k \geq 480) = 0{,}5 + \Phi\!\left(\frac{np - k_1}{\sqrt{npq}}\right)$$ + +$$= 0{,}5 + \Phi(1{,}26) = 0{,}5 + 0{,}3962 \approx \mathbf{0{,}8962}$$ + +--- + +### г) От 480 до 520 предприятий + +$$x_1 = \frac{480 - 500}{15{,}81} \approx -1{,}26, \quad x_2 = \frac{520 - 500}{15{,}81} \approx 1{,}26$$ + +$$P(480 \leq k \leq 520) = \Phi(1{,}26) - \Phi(-1{,}26) = 2\Phi(1{,}26) = 2 \cdot 0{,}3962 \approx \mathbf{0{,}7924}$$ + +--- + +## Задача 4 + +**Условие:** Вероятность банкротства предприятия за время t равна 0,2. Из **n = 6** предприятий найти вероятность того, что **сохранятся**: + +Дано: n = 6, p(сохранится) = 1 − 0,2 = **0,8**, q = 0,2 + +Используем **формулу Бернулли**: P_n(k) = C(n,k) · pᵏ · qⁿ⁻ᵏ + +--- + +### а) Два предприятия (k = 2) + +$$P_6(2) = C_6^2 \cdot (0{,}8)^2 \cdot (0{,}2)^4 = 15 \cdot 0{,}64 \cdot 0{,}0016 = \mathbf{0{,}0154}$$ + +--- + +### б) Более двух предприятий (k > 2) + +$$P(k > 2) = 1 - P(k \leq 2) = 1 - [P(0) + P(1) + P(2)]$$ + +- P₆(0) = C(6,0) · (0,8)⁰ · (0,2)⁶ = 1 · 1 · 0,000064 = 0,000064 +- P₆(1) = C(6,1) · (0,8)¹ · (0,2)⁵ = 6 · 0,8 · 0,00032 = 0,001536 +- P₆(2) = 0,0154 (вычислено выше) + +$$P(k > 2) = 1 - (0{,}000064 + 0{,}001536 + 0{,}0154) \approx 1 - 0{,}0170 = \mathbf{0{,}983}$$ + +--- + +## Задача 5 + +**Условие:** В банк отправлено **n = 4000** пакетов. Вероятность ошибки в комплектации **p = 0,0001**. Найти вероятность обнаружения: + +λ = np = 4000 · 0,0001 = **0,4** + +Используем **формулу Пуассона**: P(k) = (λᵏ / k!) · e⁻λ + +e⁻⁰·⁴ ≈ 0,6703 + +--- + +### а) Три ошибочно укомплектованных пакета (k = 3) + +$$P(3) = \frac{(0{,}4)^3}{3!} \cdot e^{-0{,}4} = \frac{0{,}064}{6} \cdot 0{,}6703 \approx \mathbf{0{,}00715}$$ + +--- + +### б) Не более трёх пакетов (k ≤ 3) + +$$P(k \leq 3) = P(0) + P(1) + P(2) + P(3)$$ + +- P(0) = e⁻⁰·⁴ = 0,6703 +- P(1) = 0,4 · e⁻⁰·⁴ = 0,2681 +- P(2) = (0,4²/2) · e⁻⁰·⁴ = 0,0536 +- P(3) = 0,00715 + +$$P(k \leq 3) = 0{,}6703 + 0{,}2681 + 0{,}0536 + 0{,}00715 \approx \mathbf{0{,}9992}$$ + +--- + +--- + +## Домашняя работа + +--- + +## Задача 1 (ДЗ) + +**Условие:** Вероятность попадания в цель р = 0,7. Из **n = 80** выстрелов — найти вероятность различных исходов. + +Дано: n = 80, p = 0,7, q = 0,3 +np = 56, npq = 16,8, √(npq) ≈ 4,10 + +--- + +### а) Ровно 75 попаданий + +$$x = \frac{75 - 56}{4{,}10} \approx 4{,}63$$ + +φ(4,63) ≈ 0,00002 (крайне малое значение) + +$$P_{80}(75) \approx \frac{0{,}00002}{4{,}10} \approx \mathbf{0{,}000005} \approx 0$$ + +--- + +### б) Не менее 75 попаданий + +$$x_1 = \frac{75 - 56}{4{,}10} \approx 4{,}63$$ + +$$P(k \geq 75) = 0{,}5 - \Phi(4{,}63) \approx 0{,}5 - 0{,}5 \approx \mathbf{0}$$ + +--- + +### в) Менее 75 попаданий + +$$P(k < 75) = 1 - P(k \geq 75) \approx \mathbf{1}$$ + +--- + +### г) Не более 75 попаданий + +$$P(k \leq 75) = P(k < 75) + P(k = 75) \approx 1 + 0 \approx \mathbf{1}$$ + +--- + +### д) Более 75 попаданий + +$$P(k > 75) \approx \mathbf{0}$$ + +--- + +### е) Все 80 выстрелов + +$$P_{80}(80) = (0{,}7)^{80} = e^{80 \ln 0{,}7} = e^{-28{,}5} \approx \mathbf{4{,}4 \times 10^{-13}}$$ + +--- + +## Задача 2 (ДЗ) + +**Условие:** Вероятность выпуска сверла с браком p = 0,02. Сверла укладываются по 100 штук. Найти наименьшее количество добавочных сверл, чтобы с вероятностью **не менее 0,9** в коробке было **не менее 100 исправных**. + +Пусть в коробке **n** сверл, p(исправное) = 0,98. Нужно: P(X ≥ 100) ≥ 0,9 + +$$P(X \geq 100) = 0{,}5 + \Phi\!\left(\frac{np - 100}{\sqrt{np \cdot 0{,}02}}\right) \geq 0{,}9$$ + +$$\Rightarrow \frac{0{,}98n - 100}{0{,}14\sqrt{n}} \geq 1{,}28$$ + +Подстановка t = √n: 0,98t² − 0,1792t − 100 ≥ 0 + +$$t = \frac{0{,}1792 + \sqrt{0{,}1792^2 + 4 \cdot 0{,}98 \cdot 100}}{2 \cdot 0{,}98} = \frac{0{,}179 + 19{,}80}{1{,}96} \approx 10{,}19$$ + +$$n \geq (10{,}19)^2 \approx 103{,}9 \Rightarrow n = 104$$ + +**Ответ:** нужно добавить **m = 104 − 100 = 4 сверла** + +--- + +## Задача 3 (ДЗ) + +**Условие:** Сколько изюминок в среднем должна содержать булочка, чтобы вероятность хотя бы одной изюминки была **не менее 0,99**? + +Используем формулу Пуассона: P(X ≥ 1) = 1 − P(X = 0) = 1 − e⁻λ ≥ 0,99 + +$$e^{-\lambda} \leq 0{,}01 \Rightarrow \lambda \geq -\ln(0{,}01) = \ln 100 \approx 4{,}61$$ + +**Ответ:** в среднем в булочке должно быть **не менее 5 изюминок** (λ ≥ 4,61) + +--- + +--- + +## Задача (Картофель) + +**Условие:** В складе 20% клубней с пятнами. Отобрано **n = 9** клубней. p(без пятен) = 0,8, q = 0,2. + +--- + +### а) Наивероятнейшее число клубней без пятен + +np − q ≤ k₀ ≤ np + p +9·0,8 − 0,2 ≤ k₀ ≤ 9·0,8 + 0,8 +**7,0 ≤ k₀ ≤ 8,0** + +Так как оба конца — целые числа, оба значения k₀ = 7 и k₀ = 8 являются наивероятнейшими (с одинаковой вероятностью). + +--- + +### б) Вероятность наивероятнейшего числа + +$$P_9(7) = C_9^7 \cdot (0{,}8)^7 \cdot (0{,}2)^2 = 36 \cdot 0{,}2097 \cdot 0{,}04 \approx \mathbf{0{,}302}$$ + +$$P_9(8) = C_9^8 \cdot (0{,}8)^8 \cdot (0{,}2)^1 = 9 \cdot 0{,}1678 \cdot 0{,}2 \approx \mathbf{0{,}302}$$ + +P(7) = P(8) ≈ **0,302** — подтверждает, что оба значения равновероятны + +--- + +## Задача (Событие А, k₀ = 20) + +**Условие:** Вероятность события А в каждом испытании p = 0,7. Сколько испытаний нужно провести, чтобы **наивероятнейшее число** равнялось **20**? + +np − q ≤ k₀ ≤ np + p, то есть при k₀ = 20: + +$$0{,}7n - 0{,}3 \leq 20 \leq 0{,}7n + 0{,}7$$ + +Из левого неравенства: 0,7n ≤ 20,3 → **n ≤ 29** + +Из правого неравенства: 0,7n ≥ 19,3 → **n ≥ 27,57 → n ≥ 28** + +Проверка: +- n = 28: np−q = 19,3, np+p = 20,3 → единственное целое k₀ = **20** ✓ +- n = 29: np−q = 20,0, np+p = 21,0 → k₀ = 20 или 21 (два наивероятнейших) + +**Ответ: n = 28** (или n = 29, если допустимо два наивероятнейших значения) + +--- + +--- + +## Задача 1 (Лотерея) + +**Условие:** Вероятность выигрыша по одному билету p = 1/7. Имея **n = 7** билетов, найти вероятность выигрыша: + +Используем **формулу Бернулли** + +--- + +### а) По двум билетам (k = 2) + +$$P_7(2) = C_7^2 \cdot \left(\frac{1}{7}\right)^2 \cdot \left(\frac{6}{7}\right)^5 = 21 \cdot \frac{1}{49} \cdot \frac{7776}{16807} = \frac{163296}{823543} \approx \mathbf{0{,}198}$$ + +--- + +### б) По трём билетам (k = 3) + +$$P_7(3) = C_7^3 \cdot \left(\frac{1}{7}\right)^3 \cdot \left(\frac{6}{7}\right)^4 = 35 \cdot \frac{1}{343} \cdot \frac{1296}{2401} = \frac{45360}{823543} \approx \mathbf{0{,}055}$$ + +--- + +## Задача 2 (Мята, гербициды) + +**Условие:** Повреждены гербицидами 15% растений мяты. Отобрано **n = 20** растений. p = 0,15, q = 0,85. + +np − q ≤ k₀ ≤ np + p +3 − 0,85 ≤ k₀ ≤ 3 + 0,15 +2,15 ≤ k₀ ≤ 3,15 + +**k₀ = 3** — наивероятнейшее число повреждённых растений + +--- + +## Задача 3 (Сбербанк) + +**Условие:** Два филиала. Филиал 1: n₁ = 120, p₁ = 0,94. Филиал 2: n₂ = 140, p₂ = 0,8. Найти наивероятнейшее число клиентов, снявших деньги. + +**Филиал 1:** np₁ = 112,8; np₁ − q₁ = 112,74; np₁ + p₁ = 113,74 → **k₀₁ = 113** + +**Филиал 2:** np₂ = 112,0; np₂ − q₂ = 111,8; np₂ + p₂ = 112,8 → **k₀₂ = 112** + +**Ответ:** Первый филиал обслуживает больше клиентов, снявших деньги: **113 > 112** + +--- + +--- + +## Задача (Событие А, 400 испытаний) + +**Условие:** Найти вероятность того, что событие А наступит **ровно 80 раз** в 400 испытаниях, если p = 0,2. + +Дано: n = 400, k = 80, p = 0,2, q = 0,8 +np = 80, npq = 64, √(npq) = 8 + +$$x = \frac{k - np}{\sqrt{npq}} = \frac{80 - 80}{8} = 0$$ + +$$\varphi(0) = \frac{1}{\sqrt{2\pi}} \approx 0{,}3989$$ + +$$P_{400}(80) \approx \frac{\varphi(0)}{\sqrt{npq}} = \frac{0{,}3989}{8} \approx \mathbf{0{,}0499}$$ + +--- + +## Задача (Стрелок) + +**Условие:** Вероятность поражения мишени p = 0,75. При **n = 10** выстрелах найти вероятность **ровно 8 попаданий**. + +$$P_{10}(8) = C_{10}^8 \cdot (0{,}75)^8 \cdot (0{,}25)^2$$ + +$$= 45 \cdot \frac{6561}{65536} \cdot \frac{1}{16} = \frac{295245}{1048576} \approx \mathbf{0{,}2816}$$ + +--- + +--- + +## Задача (Кинескопы — Интегральная теорема Лапласа) + +**Условие:** 12% кинескопов не проработают гарантийный срок. Из **n = 50** наугад выбранных — найти вероятность того, что проработают гарантийный срок: + +Дано: n = 50, p(проработает) = 1 − 0,12 = **0,88**, q = 0,12 +np = 44, npq = 50 · 0,88 · 0,12 = 5,28, √(npq) ≈ 2,298 + +--- + +### а) Ровно 47 кинескопов + +Местная теорема: + +$$x = \frac{47 - 44}{2{,}298} \approx 1{,}305, \quad \varphi(1{,}305) \approx 0{,}1714$$ + +$$P_{50}(47) \approx \frac{0{,}1714}{2{,}298} \approx \mathbf{0{,}0745}$$ + +--- + +### б) Не менее 47 кинескопов + +$$x_1 = \frac{47 - 44}{2{,}298} \approx 1{,}305$$ + +$$P(k \geq 47) \approx 0{,}5 - \Phi(1{,}305) = 0{,}5 - 0{,}4040 \approx \mathbf{0{,}0960}$$ + +--- + +### в) Менее 47 кинескопов + +$$P(k < 47) = 1 - P(k \geq 47) \approx 1 - 0{,}0960 = \mathbf{0{,}9040}$$ + +--- + +### г) Более 47 кинескопов + +$$x = \frac{48 - 44}{2{,}298} \approx 1{,}740$$ + +$$P(k > 47) = P(k \geq 48) \approx 0{,}5 - \Phi(1{,}74) = 0{,}5 - 0{,}4591 \approx \mathbf{0{,}0409}$$ + +--- + +### д) Не более 47 кинескопов + +$$P(k \leq 47) = 1 - P(k > 47) \approx 1 - 0{,}0409 = \mathbf{0{,}9591}$$ + +--- + +### е) Все 50 кинескопов + +$$P_{50}(50) = (0{,}88)^{50} \approx \mathbf{0{,}00167}$$ + +(Для проверки по местной теореме: x = (50−44)/2,298 ≈ 2,61; φ(2,61) ≈ 0,0136; P ≈ 0,006 — приближение менее точно из-за удалённости от центра) + +--- + +--- + +## Домашнее задание (Интегральная теорема Лапласа) + +--- + +## Задача 1 (ДЗ — Новорождённые) + +**Условие:** Среди **n = 1000** новорождённых. Вероятность рождения мальчика p = 0,51. Найти вероятность того, что мальчиков будет: + +np = 510, npq = 1000 · 0,51 · 0,49 = 249,9, √(npq) ≈ 15,81 + +--- + +### а) Не менее половины (m ≥ 500) + +$$x_1 = \frac{500 - 510}{15{,}81} \approx -0{,}63, \quad x_2 \to +\infty$$ + +$$P_{1000}(500 \leq m \leq 1000) \approx \Phi(+\infty) - \Phi(-0{,}63) = 0{,}5 - (-0{,}2357) = \mathbf{0{,}7357}$$ + +--- + +### б) Менее половины (m < 500, то есть m ≤ 499) + +$$P_{1000}(0 \leq m \leq 499) = 1 - 0{,}7357 = \mathbf{0{,}2643}$$ + +--- + +## Задача 2 (ДЗ — Картофель при уборке) + +**Условие:** При уборке повреждается в среднем 10% клубней. Из **n = 200** клубней найти вероятность того, что повреждено от 15 до 50 клубней. + +Дано: n = 200, p = 0,10, q = 0,90 +np = 20, npq = 18, √(npq) ≈ 4,243 + +$$x_1 = \frac{15 - 20}{4{,}243} \approx -1{,}18, \quad x_2 = \frac{50 - 20}{4{,}243} \approx 7{,}07$$ + +$$P_{200}(15 \leq m \leq 50) \approx \Phi(7{,}07) - \Phi(-1{,}18) \approx 0{,}5 - (-0{,}3810) = 0{,}5 + 0{,}3810 \approx \mathbf{0{,}881}$$