Тема: Біноміальні коефіцієнти
а ну напиши програму обчислення біноміального коефіціенту і подивимося на шо твій го здатний
Ви не увійшли. Будь ласка, увійдіть або зареєструйтесь.
Ласкаво просимо вас на україномовний форум з програмування, веб-дизайну, SEO та всього пов'язаного з інтернетом та комп'ютерами.
Будемо вдячні, якщо ви поділитись посиланням на Replace.org.ua на інших ресурсах.
Для того щоб створювати теми та надсилати повідомлення вам потрібно Зареєструватись.
Український форум програмістів → Алгоритми та структури даних, технології → Порівняння мов програмування → Біноміальні коефіцієнти
Для відправлення відповіді ви повинні увійти або зареєструватися
а ну напиши програму обчислення біноміального коефіціенту і подивимося на шо твій го здатний
а ну напиши програму обчислення біноміального коефіціенту і подивимося на шо твій го здатний
Навіщо мені щось подібне робити? Навіщо особі що тільки вчить програмування щось подібне?
Не буду нічого подібного робити - я тут не для того аби продавати якусь мову. Ні для того щоб виконувати платні чи безоплатні замовлення від якогось аноніму.
Коли ви бажаєте провести аналіз - "якою мовою, з тих які ви знаєте, легше всього написати Б.К." та скласти про це доповідь - прошу створити для цього окрему тему.
а ну напиши програму обчислення біноміального коефіціенту і подивимося на шо твій го здатний
Моя перша програма на Go:
package main
import (
"math/big"
"github.com/soniakeys/integer/binomial"
"fmt"
)
func main() {
var combs big.Int
binomial.Binomial(&combs, 8, 3)
fmt.Println(combs.String())
}
Для порівняння - Rust.
extern crate num_integer;
fn main() {
println!("{}", num_integer::binomial(8,3));
}
Щоправда, ще в cargo.toml треба додати в [dependencies]
num-integer = "*"
ur_naz, а тепер ви, своєю улюбленою мовою програмування?
дуже круто, але це не працює в жодному онлайн інтерпретаторі. Тому незалік. Ще будуть спроби?
До того ж С_8_3 можна без будь якого програмування обчислити
дуже круто, але це не працює в жодному онлайн інтерпретаторі. Тому незалік. Ще будуть спроби?
До того ж С_8_3 можна без будь якого програмування обчислити
Скільки можна казати - спершу вивчить щось, а потім кажіть "не працює". Ось вам C3180 у рідних пісочницях, усе працює.
https://play.golang.org/p/CRqrZO_Ryi1
https://play.rust-lang.org/?version=sta … d48e6e6887
31 80 ви дражнитесь? які наступні будуть? 250 125?
31 80 ви дражнитесь? які наступні будуть? 250 125?
У вас із цими числами якісь негативні спогади пов'язані, чи що? В чому проблема? Просто хотів великий результат отримати, за межами 4 байтів. Вам 23 десяткових цифр замало? А скільки треба? І ви власний код покажете, нарешті, чи лише вигадувати закиди до чужого коду виходить?
а це я так розумію код реалізації...
// Copyright 2012 Peter Luschny, Sonia Keys
// License MIT: http://www.opensource.org/licenses/MIT
// Package binomial computes binomial coefficients C(n,k)
// with an efficient algorithm using prime numbers.
package binomial
import (
"math/big"
"github.com/soniakeys/integer/prime/sieve"
"github.com/soniakeys/integer/xmath"
)
// Binomal computes the binomial coefficient C(n,k) leaving the result in z.
// It replaces the existing value of z and returns z.
func Binomial(z *big.Int, n, k uint) *big.Int {
if k > n {
return z.SetInt64(0)
}
return BinomialS(z, sieve.New(uint64(n)), n, k)
}
// BinomialS computes the binomial coefficient C(n,k) using prime number
// sieve p. BinomialS returns nil if p is too small. Otherwise it leaves
// the result in z, replacing the existing value of z, and returning z.
func BinomialS(z *big.Int, p *sieve.Sieve, n, k uint) *big.Int {
if uint64(n) > p.Lim {
return nil
}
if k > n {
return z.SetInt64(0)
}
if k > n/2 {
k = n - k
}
if k < 3 {
switch k {
case 0:
return z.SetInt64(1)
case 1:
return z.SetInt64(int64(n))
case 2:
var n1 big.Int
return z.Rsh(z.Mul(z.SetInt64(int64(n)), n1.SetInt64(int64(n-1))), 1)
}
}
rootN := uint64(xmath.FloorSqrt(n))
var factors []uint64
p.Iterate(2, rootN, func(p uint64) (terminate bool) {
var r, nn, kk uint64 = 0, uint64(n), uint64(k)
for nn > 0 {
if nn%p < kk%p+r {
r = 1
factors = append(factors, p)
} else {
r = 0
}
nn /= p
kk /= p
}
return
})
p.Iterate(rootN+1, uint64(n/2), func(p uint64) (terminate bool) {
if uint64(n)%p < uint64(k)%p {
factors = append(factors, p)
}
return
})
p.Iterate(uint64(n-k+1), uint64(n), func(p uint64) (terminate bool) {
factors = append(factors, p)
return
})
return xmath.Product(z, factors)
}
смішно, на пітоні реалізація вкладається в 6 рядків, а рішення на Rust, має обмеження незважаючи на використання типу BigInt
До того ж тут не обговорення пакетів і бібліотек...
До того ж тут не обговорення пакетів і бібліотек...
Нечувано. І звідки це вам знати обговорення чого саме тут має відбуватися? Ви продемонстрували свою неспосібність до сприйняття контексту як і
вашу нездатність написати код
.
*Автор цієї теми відписався від неї і поки не має терпіння на неї. Причина: забагато офтопу.
APL (можна потестувати тут):
функція:
binomial←{(⍺⍣{2+/0,⍵,0},1)[⍵]}
її використання:
8 binomial 3
56
81 binomial 30
1.4089890496511308e+22
80 binomial 31
1.4308729894903956e+22
250 binomial 125
9.120836692818573e+73
Усе правильно ніби?
Кілька хвилин... смішно
91208366928185711600087718663295946582847985411225264672245111235434562752
Time to process:
0.0
P.Y.,
по-перше, нічого не зрозуміло. гарна мова повинна бути зрозуміла для початківця.
по-друге, це рішення має обмеження розміром дабла. тобто, це навіть гірше за Python.
Ну, так, синтаксис доволі специфічний (проте, структурно простий — насправді він навіть простіший за сішний). Зате в один рядок і жодних зовнішніх бібліотек. Функція обчислює потрібний рядок трикутника Паскаля, циклічно генеруючи його на основі попереднього рядка, після чого вибирає з нього потрібний елемент.
Обмеження точності та розміру — від конкретної реалізації залежить. Та, яку я навів, базується на JS і використовує той же числовий тип, що й JS. Зауважу, безрозмірні цілі числа, якими оперує python, властиві далеко не всім мовам — з широко відомих, це хіба що LISP, частіше ж або зовсім нема, або десь глибоко в додаткових бібліотеках.
обчислення за допомоги трикутника Паскаля має складність О(н2), є методи які обчислюють за О(н)
Так, не всім мовам. І чи не особливості мов, ми тут обговорюємо. Бо якщо подивитись по вакансіях то топ 3 - нет PHP і жаба. І доречи, тенденція по вакансіях дуже схожа для всіх мов. після квітневого зевіздецю, зараз відбувається зростання, але чи надовго?
Телепатично вкрадений код від ur_naz:
def binomial(k,n):
return 91208366928185711600087718663295946582847985411225264672245111235434562752
Для відправлення відповіді ви повинні увійти або зареєструватися