powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / C#, Поиск простых чисел
3 сообщений из 3, страница 1 из 1
C#, Поиск простых чисел
    #38434668
Evgeniy_Aleksandrovich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте, есть проблема: данный метод, получая интервал как параметры, занимается поиском простых чисел, т.е. каждый раз генерируется число от и до, до тех пор, пока оно не будет простым. Сама проблема в том, что при тестировании: static BigInteger p = getRandomBig(124, "1000") - работает правильно, а при static BigInteger p = getRandomBig(124, "1000000") - уже не работает, а тупо зависает на каком-то этапе перебора.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
 public static BigInteger getRandomBig(BigInteger start, String finish)
        {
            Utils.RandomNumberGenerator rnd = new Utils.RandomNumberGenerator();
            BigInteger tmp = 0;
            
            BigInteger big = BigInteger.Parse(finish);
 
            while (Extensions.BigIntegerExtensions.IsProbablePrime(tmp, 1000) != true)
            {
                tmp = rnd.Next(start, big);
                Console.WriteLine(tmp);
            }
           return tmp;
        }
...
Рейтинг: 0 / 0
C#, Поиск простых чисел
    #38434832
Evgeniy_Aleksandrovich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть проблема в получении первообразного корня по модулю p: при довольно небольших p корни получаются, но при большом p - повисает! Что не так?!

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
 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;
        }
...
Рейтинг: 0 / 0
C#, Поиск простых чисел
    #38434838
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторСама проблема в том, что при тестировании: static BigInteger p = getRandomBig(124, "1000") - работает правильно, а при static BigInteger p = getRandomBig(124, "1000000") - уже не работает, а тупо зависает на каком-то этапе перебора.

Оно скорее всего не зависиат, а работает.
Просто работает долго... Очень долго...
Ты можешь посчитать, сколько лет тебе понадобится, чтобы дождаться.
Будет тебе хороший урок.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / C#, Поиск простых чисел
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]