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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.10.2011, 16:12   #1
Sparky
Участник клуба
 
Аватар для Sparky
 
Регистрация: 15.05.2009
Сообщений: 1,222
По умолчанию символ Якоби

ДОбрый день необходимо написать программу в математике для вычисления символа якоби. Нашла алгоритм в википедии
1 (проверка взаимной простоты). Если НОД (a, b) ≠1, выход из алгоритма с ответом 0.

2 (инициализация). r:=1

3 (переход к положительным числам).
Если a<0 то
a:=-a
Если b mod 4 = 3 то r:=-r
Конец если

4 (избавление от чётности). t:=0
Цикл ПОКА a – чётное
t:=t+1
a:=a/2
Конец цикла
Если t – нечётное, то
Если b mod 8 = 3 или 5, то r:=-r.
конец если

5 (квадратичный закон взаимности). Если a mod 4 = b mod 4 = 3, то r:=-r.
c:=a; a:=b mod c; b:=c.

6 (выход из алгоритма?). Если a≠0, то идти на шаг 4, иначе выйти из алгоритма с ответом r.

Попробовала написать:
Код:
simjacobi[a_, b_] := Module[{r, t, c},
      (* проверка взаимной простоты *)
      Which [ GCD[a, b] ≠ 1,
        Return[0];
        ];
      (*инициализация*)
      r = 1;
      (*переход к положительному числу*)
      Which[a < 0,
        a = -a;
        Which[ Mod[b, 4] == 3,
          r = -r;
          ];
        ];
      (*избавление от четности*)
      Label[start];
      t = 0;
      While[Mod[a, 2] == 0,
        t = t + 1;
        a = a/2;
        ];
      Which[Mod[t, 2] ≠ 0,
        Which [Mod[b, 8] == 3 || Mod[b, 8] == 5,
            r = -r;
            ];
        ];
      (*квадратичный закон взаимости*)
      Which[Mod[a, 4] == Mod[b, 4] == 3,
        r = -r];
      c = a;
      a = Mod[b, c];
      b = c;
      Which[a0, Goto[start], a == 0, Return[r]
        ];
      ];
c = simjacobi[25, 43]
Если посчитать на бумажке должно быть 1. Выдает ошибку: \!\(\*
RowBox[{\(Set::"setraw"\), \(\(:\)\(\ \)\), "\<\"Cannot assign
to raw object \\!\\(25\\). \\!\\(\\*ButtonBox[\\\"More…\\\", \
ButtonStyle->\\\"RefGuideLinkText\\\", ButtonFrame->None, \
ButtonData:>\\\"Set::setraw\\\"]\\)\"\>"}]\)
Единственное, что ограничивает полет мысли программиста-компилятор
Sparky вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Паскаль. Метод Якоби Flashmob Помощь студентам 0 23.12.2010 05:13
Символ и Байт tonatas Общие вопросы Delphi 4 15.09.2010 00:54
Символ Paul_AG Общие вопросы C/C++ 4 03.06.2009 21:06
Символ абзаца Dmittrii Microsoft Office Word 3 17.03.2009 12:13
Символ с ошибкой KLOP Общие вопросы Delphi 2 19.12.2008 09:20