Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.10.2013, 22:51   #1
zhenya.ya
Форумчанин
 
Регистрация: 29.11.2009
Сообщений: 142
По умолчанию C#, первообразный корень

Есть проблема в получении первообразного корня по модулю p: при довольно небольших p корни получаются, но при большом p (порядка p = 750070109400197 и более) - повисает! Что не так?!

Код:
public BigInteger GetPRoot(BigInteger p)
        {
            for (BigInteger i = 0; i < p; i++)
                if (IsPRoot(p, i))
                    return i;
            return 0;
        }
 
        public bool IsPRoot(BigInteger p, BigInteger a)
        {
            if (a == 0 || a == 1)
                return false;
            BigInteger last = 1;
            HashSet<BigInteger> set = new HashSet<BigInteger>();
            for (BigInteger i = 0; i < p - 1; i++)
            {
                last = (last * a) % p;
                if (set.Contains(last)) // Если повтор
                    return false;
                set.Add(last);
            }
            return true;
        }
zhenya.ya вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найти Корень aless23 Паскаль, Turbo Pascal, PascalABC.NET 2 07.02.2012 02:07
Корень n-ой степени victor5133 Помощь студентам 3 15.10.2011 15:26
Первообразный корень по модулю Samopal Паскаль, Turbo Pascal, PascalABC.NET 4 09.04.2011 15:51
Корень из числа pitonmc Общие вопросы Delphi 4 26.12.2009 12:39
квадратный корень в с++ ben95 Общие вопросы C/C++ 9 09.02.2009 15:42