Jak obliczyć coś takiego żeby przeładować int'a?

0

Muszę obliczyć wyrażenie [(a+b)! / (a!*b!)] % 1000000007, tak aby wyniki były ok. Mam funkcję Silnia:

static int Silnia(int a)
{
        long result = 1;
        for (int i = 1; i <= a; i++) result = (result * i) % 1000000007;
        return (int)result;
}

i funkcję liczacą:

static int PathCount(int a, int b)
        {
            int sum = a+b;
            int max = a > b ? a : b;
            int min = a < b ? a : b;

            long result = 1;
            while (sum != max )
            {
                result = (result * sum ) % 1000000007;
                --sum ;
            }

            return (int)result / Silnia(min);
        }

Ale wyniki nie zawsze się zgadzają, dostaje często 0 lub 1 :(

dodanie znacznika `` i zamiana znacznika <code class="cpp"> na <code class="csharp"> - @furious programming

0

Nie licz silni. Obliczaj kolejny element sumy na podstawie poprzedniego. Obliczaj za pomocą typu double.
Tu przykład: http://4programmers.net/Forum/C_i_C++/240195-program_z_wpisaniem_zmiennych_z_lilii_polecen?p=1072598#id1072598

0

@Pytajnik123 rozumiem że spałeś na zajeciach z matematyki dyskretnej? Weź na chwilę policz sobie ile cyfr miałoby na przykład 100! i pomyśl jakie silnie ty chcesz liczyć ;)

0

Ja o tym dobrze wiem, dlatego obliczałem silnie modulo ale chyba nie tak coś robie bo czasami wynik dostaje 0 lub 1.

0

http://pl.wikipedia.org/wiki/Arytmetyka_modularna zapoznaj się jak to wygląda z dzieleniem. Poszukaj też na tym forum post od @MarekR22 dotyczący dzielenia i modulo.

1 użytkowników online, w tym zalogowanych: 0, gości: 1