2014 dxdy logo

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

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




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

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


20/08/14
11766
Россия, Москва
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
12058
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
11766
Россия, Москва
Последняя строчка хитрее: 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
14495
Да насчёт праймориала просто баловство. Я подумал что можно ткнуть 29#
А вот проблема накатила. У меня есть девять вложенных for и в них ещё пара вложенных if и вот в серединку я вставляю безобидное k=0; for( in=1,2,k++); и окно консоли закрывается, как при страшейших синтактических ошибках. переменные раньше не использовались

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


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

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


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

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


13/08/08
14495
Вот чтобы протестировать вложение циклов, сделал генерацию этого дела
{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
14495
Iosafat
у синуса нет предела на бесконечности. Но мысль ваша мудрая: со слабеньким компом нечего залезать далеко :-( .

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


05/09/16
12058
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
14495

(Оффтоп)

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

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


13/08/08
14495
решил тут посмотреть разности между простым и следующим 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
12058
gris в сообщении #1579078 писал(а):
Что такое my?

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

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

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

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


13/08/08
14495
Вопрос.
Для большого числа (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++);
Спасибо.

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

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



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

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


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

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