2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Операторы в PARI/GP
Сообщение08.05.2023, 16:32 


20/02/20
82
Коллеги.подскажите,пожалуйста,как в PARI работает оператор "x%n" для натурального n и рационального x=p/q.Например, 3/7%15=9, 13/5%7=4, 56/3%7=0,а применение 4/9%6 вовсе выдает ошибку.Сходу как-то не разобрался в алгоритме вычисления.

 Профиль  
                  
 
 Re: Операторы в PARI/GP
Сообщение08.05.2023, 20:12 
Заслуженный участник


20/08/14
11764
Россия, Москва
Оно представляет $x=p/q$ как $p\cdot q^{-1}$, что в общем-то пока правомочно. Но при накладывании условия $x \pmod{n}$ выходит следующее: $x \pmod n = p\cdot q^{-1}\pmod n=p\cdot(q^{-1}\bmod n)\pmod n$ и вот тут уже $q^{-1}$ начинает пониматься не как вещественное (или рациональное) число $1/q$, а как обратный элемент к $q$ в кольце по модулю $n$ (т.е. такое что $q^{-1} \cdot q = 1\pmod n$). Ну а такового не существует если $\gcd(q,n)>1$ -- вот и ошибка при попытке его вычислить.

Если Вам не критично получение в результате именно рационального числа, то переходите к вещественному числу $x=p/q$ и уже от него берите остаток по модулю. Или домножением x на 1. (именно с точкой!), или в модуле n укажите вещественное число (с точкой). Что забавно результат может отличаться в последнем знаке на 1.

Сохранить рациональность ответа у меня получилось так: x%n=frac(x/n)*n

 Профиль  
                  
 
 Re: Операторы в PARI/GP
Сообщение10.05.2023, 13:23 


20/02/20
82
Dmitriy40
Да,с кольцом $\mathbb{Z_\mathbf{n}}$ все понятно.Видимо, PARI ориентирован на модульную арифметику.Собственно,мой вопрос возник вот по какому поводу.В одном из ваших сообщений(не помню где,но по числам Мерсенна) у Вас в коде(я уж пишу по наброскам в строку)
Код:
forstep(x=3,100000,2,t=x;v=[];for(n=2,16,m=2^n-1;while(t%m==0,t=t/m;v=concat(v,m)));if(t==1,print(x,":",v)))
есть фрагмент "t%m",тестирующий,как я понял,t на кратность m.Но мне не совсем понятен алгоритм цикла while() внутри цикла for().Допустим,$x=9$.Тогда при первой итерации станет $v=[3]$.И как дальше алгоритм выходит на $v=[3,3]$,что значится на выходе $9:[3,3]$?

 Профиль  
                  
 
 Re: Операторы в PARI/GP
Сообщение10.05.2023, 13:51 
Заслуженный участник


20/08/14
11764
Россия, Москва
genk в сообщении #1593299 писал(а):
Но мне не совсем понятен алгоритм цикла while() внутри цикла for().Допустим,$x=9$.Тогда при первой итерации станет $v=[3]$.И как дальше алгоритм выходит на $v=[3,3]$,что значится на выходе $9:[3,3]$?
Так на первой итерации $t=9$ делится на $m=2^2-1=3$ и потому t становится равным $9/3=3$, в v[] записывается $3$. На второй итерации while $t$ всё ещё делится на $3$ и потому оно снова на него делится и в v[] снова добавляется $3$. На третьей итерации $t=1$ уже не делится на $m=3$ и потому цикл while завершается с $v=[3,3]$.
Цикл while исключает делитель $m$ из числа $t$, причём столько раз в какой степени он туда входит, перечисляя их в v[]. А так как $m$ пробегает только по числам вида $2^n-1$, то и делители исключаются только такого вида. И если число $x=t$ состоит только из них, выводится результат на экран. Не знаю/помню где и зачем такое было нужно.

 Профиль  
                  
 
 Re: Операторы в PARI/GP
Сообщение11.05.2023, 11:35 


20/02/20
82
Dmitriy40
:D

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group