2014 dxdy logo

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

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




Начать новую тему Ответить на тему На страницу Пред.  1 ... 39, 40, 41, 42, 43, 44, 45 ... 52  След.

А вам пакет PARI/GP интересен?
Да 82%  82%  [ 56 ]
Нет 6%  6%  [ 4 ]
Не уверен(а) 12%  12%  [ 8 ]
Всего голосов : 68
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение23.01.2023, 12:37 
Заслуженный участник


20/08/14
11178
Россия, Москва
wrest в сообщении #1578371 писал(а):
Да, но почему вы решили что это логарифм?
Спасибо, был не прав. А они сволочи! Переобзывать распространённые функции. :facepalm:

gris в сообщении #1578384 писал(а):
Кстати, как коротко записать
n=2*3*5*7;
Если для себя в тексте, то 7# (оно же 8#,9#,10#, но с составными обычно не употребляется), если в программе, то n=vecprod(primes(4)) (штук) или n=vecpod(primes([2,7])) (диапазон) (возможны и другие варианты, но этот даёт сразу точно целое число).

Даже если не дают сделать массив длиннее 16млн элементов, то можно в каждый элемент положить длинное число или структуру и хранить в них много данных, или использовать матрицы:
Код:
? default(parisize,2^30);
  ***   Warning: new stack size = 1073741824 (1024.000 Mbytes).
? v=vector(1000000); sizebyte(v)
%1 = 12000004
? v=vector(1000000,i,10^999+i^2); sizebyte(v)
%2 = 428000004
? v=vector(1000000,i,vectorsmall(100,j,10^9+i+j^3)); sizebyte(v)
%3 = 408000004
? v=matrix(1000000,70); sizebyte(v)
%4 = 840000564
При использовании степеней двойки деление общего индекса на два поля будет быстрым.

 Профиль  
                  
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение23.01.2023, 12:38 


05/09/16
11538
gris в сообщении #1578384 писал(а):
Кстати, как коротко записать
n=2*3*5*7;

В смысле, а как ещё короче можно? Ну вот n=210 будет короче..
Если вы хотите сделать массив с факторизациями (разложениями на множители), то разложение делает функцияfactor() например:
? factor(210)
%1 =
[2 1]

[3 1]

[5 1]

[7 1]

?

Она делает матрицу из двух столбцов, первый - простой множитель, второй - его степень.
Если вас не инересуют степени, то можете брать только первый столбец:
? v=Vec(factor(210)[,1]);print(v)
[2, 3, 5, 7]
?

Если хотите насобирать множители, то
? v=vector(10);for(i=1,10,v[i]=Vec(factor(i)[,1]));print(v)
[[], [2], [3], [2], [5], [2, 3], [7], [2], [3], [2, 5]]
?

Здесь получится вектор из векторов, содержащих множители. Например проверить делится ли 6-й элемент на 2 или 5-й на 3 (v - вектор из предыдущего примера):
? n=6;p=2;if(vecsearch(v[n],p),print(n, " delitsya na ",p),print(n, " ne delitsya na ",p))
6 delitsya na 2
? n=5;p=3;if(vecsearch(v[n],p),print(n, " delitsya na ",p),print(n, " ne delitsya na ",p))
5 ne delitsya na 3
?

 Профиль  
                  
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение23.01.2023, 13:03 
Заслуженный участник


20/08/14
11178
Россия, Москва
Последняя строчка хитрее: n=5;p=3; print(n, if(vecsearch(v[n],p), "", " ne"), " delitsya na ",p). ;-) If может выдавать результат в виде любого объекта (но только одного), который можно использовать как угодно.

 Профиль  
                  
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение23.01.2023, 13:33 
Заслуженный участник
Аватара пользователя


13/08/08
14453
Да насчёт праймориала просто баловство. Я подумал что можно ткнуть 29#
А вот проблема накатила. У меня есть девять вложенных for и в них ещё пара вложенных if и вот в серединку я вставляю безобидное k=0; for( in=1,2,k++); и окно консоли закрывается, как при страшейших синтактических ошибках. переменные раньше не использовались

 Профиль  
                  
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение23.01.2023, 14:17 


05/09/16
11538
gris
Кстати, вы в курсе что есть PARI/GP онлайн? Вот тут: https://pari.math.u-bordeaux.fr/gp.html
Возможно, поможет понять это у вас ограничения машины или самого PARI/GP

 Профиль  
                  
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение23.01.2023, 14:27 
Заслуженный участник


20/08/14
11178
Россия, Москва
gris в сообщении #1578414 писал(а):
Я подумал что можно ткнуть 29#
Можно ткнуть prodeuler(p=2,29,p), но она выдаёт действительное число, что часто неудобно и приходится дополнительно приводить к целому (чему мешает ограниченная точность представления действительных чисел).

 Профиль  
                  
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение23.01.2023, 15:19 
Заслуженный участник
Аватара пользователя


13/08/08
14453
Вот чтобы протестировать вложение циклов, сделал генерацию этого дела
{n=24; print1( "{print( ",n, ");" ); print1( "k=0; " );
for( i=1,n, print1( "for( i",i,"=1,2," ) ); print1( "k++" );
for( i=1,n, print1( ")" ) );print1( ";print(k)}" )}


выдала
{print(24);k=0;for(i1=1,2,for(i2=1,2,for(i3=1,2,for(i4=1,2,for(i5=1,2,
for(i6=1,2,for(i7=1,2,for(i8=1,2,for(i9=1,2,for(i10=1,2,
for(i11=1,2,for(i12=1,2,for(i13=1,2,for(i14=1,2,for(i15=1,2,
for(i16=1,2,for(i17=1,2,for(i18=1,2,for(i19=1,2,for(i20=1,2,
for(i21=1,2,for(i22=1,2,for(i23=1,2,
for(i24=1,2,k++))))))))))))))))))))))));print(k)}


отработала 24 простеньких вложения
24
16777216


Значит что-то у меня не так в той программе :cry: :cry: :cry:

 Профиль  
                  
 
 У всего есть предел
Сообщение23.01.2023, 15:22 
Аватара пользователя


21/01/23

159
Запорожье
wrest Если воспользоваться телефоном (может оказаться, что телефон сильнее компьютера) или другим языком, или предложить посчитать тому, у кого памяти больше, или воспользоваться онлайн калькулятором... - не поможет, у всего есть предел.

 Профиль  
                  
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение23.01.2023, 15:31 
Заслуженный участник
Аватара пользователя


13/08/08
14453
Iosafat
у синуса нет предела на бесконечности. Но мысль ваша мудрая: со слабеньким компом нечего залезать далеко :-( .

 Профиль  
                  
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение23.01.2023, 15:45 


05/09/16
11538
gris в сообщении #1578384 писал(а):
Да, у меня слабенький комп с windows32 и 4Гб оперативки :facepalm: .
Так что это чисто теоретический запрос.

Кстати, выше верно заметили про телефон :mrgreen:
Я 80% подсчетов делаю в андроиде, который у меня в целом такой же или быстрее чем ноутбук.
Например 24-разово вложенный цикл который вы привели, как ноутбук 2019 года (Intel(R) Core(TM) i7-8565U CPU @ 1.80GHz 1.99 GHz) так и планшет (2022 года, snapdragon 8 gen 1) проходят за 6 секунд, а телефон ("флагман" 2020 года, exynos 990) за 5 секунд. Но в целом планшет быстрее ноутбука на однопоточных задачах (коими задачи pari/gp и являются если не заморачиваться с делением на потоки вручную). Гаджеты сейчас быстрые стали...
У вас телефон (или есть и планшет) -- андроиды? Для сравнения возможной скорости там и там, можете запустить geekbench 5 ( https://www.geekbench.com ), бенчмарк "single-core score" покажет примерно разницу в производительности между устройствами на задачах pari/gp

 Профиль  
                  
 
 Почему 32?
Сообщение23.01.2023, 15:48 
Аватара пользователя


21/01/23

159
Запорожье
gris У меня тоже 4 Гига, но 64 разрядная ОС, почему вы установили 32 разрядную? Извините, но если аргумент окажется хлипким, может переустановить Windows? Компьютер после переустановки обычно работает лучше, скажет т.с. спасибо.

 Профиль  
                  
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение23.01.2023, 16:11 
Заслуженный участник
Аватара пользователя


13/08/08
14453

(Оффтоп)

не хотелось бы в полезной теме оффтопить, на за сочувствие спасибо 8-)

 Профиль  
                  
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение27.01.2023, 15:30 
Заслуженный участник
Аватара пользователя


13/08/08
14453
решил тут посмотреть разности между простым и следующим 19-тым по счёту простым. Интересненько.
В OEIS представлено подобное с различными разностями.
Кусок кода:
a(n)=my(p=prime(n)); nextprime(nextprime(p+1)+1)-p
Что такое my?

 Профиль  
                  
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение27.01.2023, 16:24 


05/09/16
11538
gris в сообщении #1579078 писал(а):
Что такое my?

Это явное объявление локальных (для функции) переменных, которые
a) переопределяют (затеняют) такие же имена более глобальных переменные если они есть, для использования декдарируемых имён в функции
б) уничтожаются при возврате/выходе из функции.

Ну то есть, если вы объявили скажем my(p ...) то можете не переживать что где-то в другом месте есть какая-то другая p - у вас в функции будет использоваться именно та p которую вы объявили, и когда функция закончит работу, эта объявленная в функции p пропадёт.
По-хорошему, через my() надо бы объявлять все переменные, которые вы собираетесь использовать в функции (кроме итераторов циклов), чтобы ваша функция ничего вам не испортила в других частях программы.

P.S. Я глянул на ваши последние тексты тут, и понял что вы вообще пока не написали никаких функций :) Ну что ж, начинайте...

 Профиль  
                  
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение13.02.2023, 21:27 
Заслуженный участник
Аватара пользователя


13/08/08
14453
Вопрос.
Для большого числа (1е12) больших чисел (1е60)
предварительная для каждого числа проверка на делимость на простые от 2 до 41 (или до скольких?) не помогает при проверке на простоту?
То есть
if( i%2 !=0 && i%3!=0 && i%5!=0 && i%7!=0 && i%11!=0 && i%13!=0 && i%17!=0 && i%19!=0 && i%23!=0 && i%29!=0 && i%31!=0 && i%37!=0 && i%41!=0 && ispseudoprime(i), k++ );
или просто
if( ispseudoprime(i), k++);
Спасибо.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 778 ]  На страницу Пред.  1 ... 39, 40, 41, 42, 43, 44, 45 ... 52  След.

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



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

Сейчас этот форум просматривают: gris


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

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