На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! правила раздела Алгоритмы
1. Помните, что название темы должно хоть как-то отражать ее содержимое (не создавайте темы с заголовком ПОМОГИТЕ, HELP и т.д.). Злоупотребление заглавными буквами в заголовках тем ЗАПРЕЩЕНО.
2. При создании темы постарайтесь, как можно более точно описать проблему, а не ограничиваться общими понятиями и определениями.
3. Приводимые фрагменты исходного кода старайтесь выделять тегами code.../code
4. Помните, чем подробнее Вы опишете свою проблему, тем быстрее получите вразумительный совет
5. Запрещено поднимать неактуальные темы (ПРИМЕР: запрещено отвечать на вопрос из серии "срочно надо", заданный в 2003 году)
6. И не забывайте о кнопочках TRANSLIT и РУССКАЯ КЛАВИАТУРА, если не можете писать в русской раскладке :)
Модераторы: Akina, shadeofgray
Страницы: (3) 1 [2] 3  все  ( Перейти к последнему сообщению )  
> Разложение на простые множители..
    Согласен, просто есть очевидное беспокойство за числа близкие к 1031.
      1031 это примерно 100-битное число?
        Цитата macomics @
        Так будет чуть быстрее

        Думаю, не совсем правильный алгоритм. Мой при цифре 8 дает результат: 1 2 2 2, твой: 1 2 4. Но число 4 не простое.
          Точно. Равно не туда поставил
          ExpandedWrap disabled
            #include <iostream>
            #include <vector>
             
            void PrimeFactorization(unsigned int Value, std::vector<int> &Res) {
               unsigned int Div = 2, Div2 = 4;
               Res.push_back(1);
               while (Value > 1) {
            //      std::cout << Div << " "; // Лишнее осталось
                  while (Value >= Div2 && Value % Div == 0) {
                     Res.push_back(Div);
                     Value /= Div;
                  }
                  if (Value < Div2) {
                     Res.push_back(Value);
                     Value = 1;
                  }
                  if (Div++ == 2) Div++;
                  Div2 = Div * Div;
               }
            //   std::cout << std::endl;
            }
             
            int main() {
              unsigned int Value = 65536;
              std::vector<int> Res;
              PrimeFactorization(Value, Res);
              std::cout << "Value (" << Value << "): ";
              for(const auto &i: Res) std::cout << i << " ";
              std::cout << std::endl;
              return 0;
            }
          Вот так правильно. Так вывод будет такой
          ExpandedWrap disabled
            2
            Value (8): 1 2 2 2
             
            2
            Value (65536): 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2


          Добавлено
          Почему исправить нельзя? Я в прошлом исправлении накосячил. В предыдущем варианте он 3-ки пропускает и идет не только по нечетным.
          ExpandedWrap disabled
                #include <iostream>
                #include <vector>
                
                void PrimeFactorization(unsigned int Value, std::vector<int> &Res) {
                   unsigned int Div = 2, Div2 = 4;
                   Res.push_back(1);
                   while (Value > 1) {
                      while (Value >= Div2 && Value % Div == 0) {
                         Res.push_back(Div);
                         Value /= Div;
                      }
                      if (Value < Div2) {
                         Res.push_back(Value);
                         Value = 1;
                      }
                      if (Div++ > 2) Div++;
                      Div2 = Div * Div;
                   }
                }
                
                int main() {
                  unsigned int Value = 65536;
                  std::vector<int> Res;
                  PrimeFactorization(Value, Res);
                  std::cout << "Value (" << Value << "): ";
                  for(const auto &i: Res) std::cout << i << " ";
                  std::cout << std::endl;
                  return 0;
                }
          Сообщение отредактировано: macomics -
            Цитата macomics @
            число 2147483647 с моими дополнениями проверяется меньше секунды

            Моя программа на бейсике ищет все простые числа до 2ккк за менее, чем 4 секунды.
              Цитата macomics @
              1031 это примерно 100-битное число?
              Да, 103 бита.
                Цитата Mikle @
                Моя программа на бейсике ищет все простые числа до 2ккк за менее, чем 4 секунды.

                Прежде чем хвастаться - выложите алгоритм. Это раздел про алгоритмы, а не про понты.
                  Цитата macomics @
                  выложите алгоритм

                  Может, всё-таки, не алгоритм, а исходник? Если кому-то интересно - выложу завтра, он на рабочем компьютере. Так что не надо тут про понты рассуждать.
                  А алгоритмически там - обычное решето Эратосфена.
                    Ну глупо же - биться за скорость, и при этом генерировать простые числа... что, не умеем взять готовый список и положить в ресурсы или хотя бы в текстовый файл радом с программой? уж вроде скачать такой список совсем не проблема.
                      Цитата Akina @
                      Ну глупо же - биться за скорость, и при этом генерировать простые числа... что, не умеем взять готовый список и положить в ресурсы

                      Akina, сжалься! Ты наверное не заметил начального условия... разложение для больших чисел, вплоть до 10^32.

                      Цитата Славян @
                      (+разложение на простые) для чисел от 2 до 1032, пожалуйста!
                        Цитата Mikle @
                        Может, всё-таки, не алгоритм, а исходник?

                        Исходный текст записывает алгоритм на определенном языке. Если мы не привязываемся к конкретному ЯП, то это алгоритм. Хоть блок-схему нарисуйте и выложите.
                        Цитата Akina @
                        Ну глупо же - биться за скорость, и при этом генерировать простые числа... что, не умеем взять готовый список и положить в ресурсы или хотя бы в текстовый файл радом с программой? уж вроде скачать такой список совсем не проблема.

                        Представляю себе исполняемый файл, у которого в ресурсах +10 Гб текста с простыми числами. :)
                          Цитата macomics @
                          Представляю себе исполняемый файл, у которого в ресурсах +10 Гб текста с простыми числами.

                          Не, ну может где-то и есть специфические задачи такие, тогда да - можно эту таблицу всунуть в БД. Но мне такие задачи не встречались.

                          Добавлено
                          Цитата macomics @
                          Хоть блок-схему нарисуйте и выложите.

                          Ну щя таких инструментов валом, например этот.
                            Цитата Majestio @
                            Не, ну может где-то и есть специфические задачи такие, тогда да - можно эту таблицу всунуть в БД. Но мне такие задачи не встречались.

                            Тут вся суть в том, что это текст. Зачем, если включаете в ресурсы числа, хранить их в виде текста? Чтобы наверное потом потратить кучу времени на преобразование текста в число и цикл прохода по строке. Вместо того, чтобы просто индексировать бинарный массив.

                            Так уж лучше запихнуть в виде bmp 32-bpp. Забавная картинка выйдет.
                            Сообщение отредактировано: macomics -
                              Цитата macomics @
                              Так уж лучше запихнуть в виде bmp 32-bpp. Забавная картинка выйдет.

                              Ну реализаций "внешнего хранения" можно придумать множество вариантов. Не суть. Я про то, что и вариант Акины, даже с такими предварительными условиями, может дать выхлоп.
                                Вот моя реализация поиска простых чисел до 2ккк, находящая все числа на i5-2400 за 3.75 с.: https://gamedev.ru/files/?id=142299
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (3) 1 [2] 3  все


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0391 ]   [ 15 queries used ]   [ Generated: 18.09.25, 21:07 GMT ]