Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > Подсчёт количества сочетаний для больших чисел


Автор: Hohhi 15.12.2007, 21:46
Привет всем! в понедельник сдавать проект по информатике за пол года, пишу на с++ builder. Проект решает линейные системы, работает с бином Ньютона, ну и там по мелочевке(ортогонализация векторов, и ещё пару вещей). Так вот показывал преподу(я первый курс на ИТ, республика Молдова) и он сказал, что на 10 мало- раз, и ввел сочетания из 1000000 по 999999, или что то в этом роде, может на пару разрядов выше и прога выдала exception. Обрабатывать исключения не умею раз, а он затребовал чтобы считала 10-15 значные числа, сказал, что можно сделать подобное и без длиной арифметики. Я не знаю как, сам вроде нашёл реккурсивную формулу, так что должна вроде использовать данный long-ом диапозон на максимум, вот код функции:

Код

double sochet(int k,int n)
{
    if (k==0)
        return 1;
    else
            return (sochet(k-1,n)*(n-k+1))/k;
}

 Помогите, если знаете про подобное, длинную арифметику с произведением не осилю до понедельника, так как ещё надо написать пару-троику функции в проекте объёмных, дооформлять и готовиться к экзамену на вторник, оставил на последний день, виноват, выручайте пожалуйста

Автор: JackYF 16.12.2007, 00:07
Цитата(Hohhi @  15.12.2007,  21:46 Найти цитируемый пост)
чтобы считала 10-15 значные числа

можно взять тип long long aka int64. Этого хватит на 15 десятичных разрядов.

Автор: Akina 16.12.2007, 00:24
Цитата(Hohhi @  15.12.2007,  22:46 Найти цитируемый пост)
вот код функции

Преп тебя назвал [censored] - не приходило в голову проверить, что k>n/2?

Автор: Hohhi 16.12.2007, 00:45
Akina, все мы уимся и можно культурно общаться, почему к больше n/2, ????, сочетания из 4 по 5 вполне существуют

Автор: Akina 16.12.2007, 23:41
C(n,k) = C(n,n-k)
Цитата(Hohhi @  15.12.2007,  22:46 Найти цитируемый пост)
ввел сочетания из 1000000 по 999999,

Твоя программа ДОЛЖНА была считать сочетания из 1000000 по (1000000-999999)=1, т.е. мгновенно выдать 1000000.

Автор: AlexST 2.1.2008, 01:11
del

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)