2014 dxdy logo

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

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




Начать новую тему Ответить на тему На страницу Пред.  1 ... 3, 4, 5, 6, 7, 8, 9 ... 54  След.

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


22/03/08

7154
Саратов
maxal
никак не получается совсем простенькая программка, наверное, я очень тупая :oops:
Вот так
Код:
{i=12;
forprime(n=83, 199, p=nextprime(n+1); q=nextprime(p+1); if( q-n>i, i=q-n ) );
print(i);
}

программка работает, выдаёт результат 24.
Но мне надо, чтобы она выдала все три результата: 14, 18, 24.
Как только ни пробовала, выдаётся ошибка.
Вот варианты:
Код:
{i=12;
forprime(n=83, 199, p=nextprime(n+1); q=nextprime(p+1); if( q-n>i, i=q-n ), print(i); ); );
}

{i=12;
forprime(n=83, 199, p=nextprime(n+1); q=nextprime(p+1); if( q-n>i, i=q-n ), print(i) ) )
}

{i=12;
forprime(n=83, 199, p=nextprime(n+1); q=nextprime(p+1); if( q-n>i, i=q-n ), print(i) ) );
}

Как правильно написать?

Ещё вопрос о forprime. У меня такое ощущение, что этот оператор работает очень медленно. Что можете сказать?

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


10/07/15
286
Nataly-Mak в сообщении #1058732 писал(а):
if( q-n>i, i=q-n ), print(i) )
Код:
if( q-n>i, i=q-n ; print(i)) )
печатать после определения очередного максимума
{i=12;
forprime(n=83, 199, p=nextprime(n+1); q=nextprime(p+1); if( q-n>i, i=q-n ; print(i));
)
}

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


22/03/08

7154
Саратов
Begemot82
ох, с этой ";" я ничего не понимаю. Когда её надо писать, когда не надо :-(
Сейчас попробую ваш вариант.

-- Сб окт 03, 2015 10:35:50 --

Да, ваш вариант работает.

Почему у вас здесь
Код:
i=q-n ;

стоит ";", а не ","?
Это ведь такой же оператор, как и
Код:
q-n>i

Когда операторы разделяются запятой, а когда точкой с запятой?

-- Сб окт 03, 2015 10:49:30 --

Вот здесь, например:
Код:
if( ispseudoprime(n*30030+15683) && nextprime((n*30030+15683)+1)==n*30030+15683+6 &&
nextprime((n*30030+15683+6)+1)==n*30030+15683+24 && nextprime((n*30030+15683+24)+1)==n*30030+15683+30 &&
nextprime((n*30030+15683+30)+1)==n*30030+15683+54 && nextprime((n*30030+15683+54)+1)==n*30030+15683+66 &&
nextprime((n*30030+15683+66)+1)==n*30030+15683+84 && nextprime((n*30030+15683+84)+1)==n*30030+15683+90 &&
nextprime((n*30030+15683+90)+1)==n*30030+15683+96 && nextprime((n*30030+15683+96)+1)==n*30030+15683+114 &&
nextprime((n*30030+7433+114)+1)==n*30030+7433+126, print(n*30030+15683); );

перед print() стоит запятая, а не точка с зяпятой. И всё работает.
Ничего не понимаю :-(

-- Сб окт 03, 2015 10:56:18 --

А, кажется поняла, где у меня ошибка!
После
Код:
i=q-n

скобка влезла совсем не нужная
Код:
if( q-n>i, i=q-n ), print(i) )

И вот как она влезла? :D А я всю голову сломала, почему не работает.
Нет, синтаксис всё равно какой-то непонятный: где запятая, где точка с запятой...

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


10/07/15
286
Общий вид if
Код:
if (<условие>,<операторы1>,<операторы2> )

Аналог на бейсике
IF <условие> THEN
<операторы1>
ELSE
<операторы2>
END IF
В программе <операторы1>
Код:
i=q-n ; print(i)
они должны разделять разделяются ";"

Если поставить "," то печать выполняется когда условие не выполняется

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


22/03/08

7154
Саратов
Ну, ни фига не понимаю :-(
Вот так:
Код:
{i=12;
forprime(n=83, 199, p=nextprime(n+1); q=nextprime(p+1); if( q-n>i, i=q-n, print(i) ) )
}

работает неправильно, выдаёт
14 14...18 18 18...

А вот так:
Код:
{i=12;
forprime(n=83, 199, p=nextprime(n+1); q=nextprime(p+1); if( q-n>i, i=q-n; print(i) ) )
}

правильно работает, выдаёт три результата: 14, 18, 24.

Здесь прямо значение точки с запятой какое-то мистическое :lol:

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


10/07/15
286
Nataly-Mak
Для Вас в одной последовательности приведен код для PARI :lol:
Код:
gap=0; p=2; q=3; forprime(r=5, 1e9, if(r-p>gap, gap=r-p; print1(p", ")); p=q; q=r)
Чуть переделать
Код:
gap=0; p=2; q=3; forprime(r=5, 1e9, if(r-p>gap, gap=r-p; print("gap "gap" p="p", ")); p=q; q=r)
и то что доктор прописал

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


22/03/08

7154
Саратов
Begemot82
посмотрите, пожалуйста, мой последний пост.
";" стоит только перед print(i).
А после оператора
Код:
q-n>i

почему тогда стоит запятая? Почему после этого оператора можно запятую, а после
Код:
i=q-n

нельзя?
Кроме того, в моём варианте нет нескольких других ";", которые есть в вашем варианте. И вот зачем совать лишние ";" туда, где можно и без них обйтись? Только запутывать.
В общем, фигня какая-то с этими ";" :-(

-- Сб окт 03, 2015 11:19:51 --

Begemot82
моя ваше совсем не понимает :lol:
Не надо меня дальше запутывать, я и так уже запуталась.
Вы насовали кучу ";" там, где они совсем не нужны.
А вот почему перед print(i) надо обязательно ставить ";", я так и не поняла.

С запятой код не работает, а с ";" работает.

-- Сб окт 03, 2015 11:23:16 --

Ещё раз повторяю вопрос для maxal

вот эта программка работает правильно:
Код:
{i=12;
forprime(n=83, 199, p=nextprime(n+1); q=nextprime(p+1); if( q-n>i, i=q-n; print(i) ) )
}

а вот эта
Код:
{i=12;
forprime(n=83, 199, p=nextprime(n+1); q=nextprime(p+1); if( q-n>i, i=q-n, print(i) ) )
}

работает неправильно.
Почему? Каково тут значение точки с запятой перед print(i) :?:

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


10/07/15
286
Я же привел формат оператора "if", там написано про запятые и что они означают. Их всего две, остальные ";"

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


22/03/08

7154
Саратов
Begemot82 в сообщении #1058739 писал(а):
Общий вид if
Код:
if (<условие>,<операторы1>,<операторы2> )


и где здесь написано про ";" и что она означает?
Я вижу в операторе <условие>, после него стоит запятая,
дальше вижу <операторы1>, после них тоже стоит запятая (кстати, почему операторы1 во множественном числе? Это много каких-то операторов именно типа 1? И что это за тип 1?)
дальше вижу , <операторы2>, после которых уже ничего не стоит. Тот же вопрос про операторы2.

Begemot82
нельзя ли вас попросить не вмешиваться в учебный курс, автором которого вы не являетесь?
Я больше с вами не собираюсь дискутировать по вопросам учебного курса.
Мне нужен ответ автора курса.

-- Сб окт 03, 2015 11:50:00 --

maxal
и ещё один важный вопрос (зафлудили тут):
что вы можете сказать о быстроте выполнения оператора forprime :?:
Мне кажется, он выполняется очень медленно по сравнению с аналогичной программкой Vovka17, написанной совсем на другом языке.

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


09/02/09
2089
Минск, Беларусь
Nataly-Mak, было ясно сказано, что внутри набора <операторы1> разделение идёт точками с запятой, как и внутри набора <операторы2>.

Набор <операторы1> выполняется, если условие оказалось верным, а набор <операторы2> в противном случае.

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


22/03/08

7154
Саратов
Droog_Andrey в сообщении #1058764 писал(а):
было ясно сказано, что внутри набора <операторы1> разделение идёт точками с запятой, как и внутри набора <операторы2>.

Набор <операторы1> выполняется, если условие оказалось верным, а набор <операторы2> в противном случае.

У меня оба оператора
Код:
i=q-n, print(i)

должны выполниться, если условие выполняется!
Понимаете, оба.
Если условие
Код:
q-n>i

выполнено, то i присваивается новое значение и это i печатается.
Если же это условие не выполняется, то не надо выполнять ни один оператор из следующих за условием. Ни один из двух.
У меня нету набора операторов для "в противном случае". В противном случае не выполняется ничего.

Ну, по крайней мере, стало уже яснее, что за "операторы1" и "операторы2".
То есть если бы у меня было 10 операторов, которые надо было выполнить при выполнении условия (все они "операторы1"), все их надо было бы разделить точкой с запятой. А перед "операторы2" поставить уже запятую и все эти операторы тоже разделить точкой с запятой. Так что ли?
Однако...

Если при этом всунуть точку с запятой в другие места, где вполне можно и без неё обойтись (как это сделал Begemot82), точно крыша поедет :lol:

-- Сб окт 03, 2015 13:43:59 --

Вот тут
Begemot82 в сообщении #1058739 писал(а):
Общий вид if
Код:
if (<условие>,<операторы1>,<операторы2> )

Аналог на бейсике
IF <условие> THEN
<операторы1>
ELSE
<операторы2>
END IF


совсем не надо было приводить аналог на Бейсике, а надо было дать пояснение про операторы1 и операторы2 прямо по конструкции в PARI/GP.

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


20/08/14
11766
Россия, Москва
Nataly-Mak в сообщении #1058770 писал(а):
То есть если бы у меня было 10 операторов, которые надо было выполнить при выполнении условия (все они "операторы1"), все их надо было бы разделить точкой с запятой. А перед "операторы2" поставить уже запятую и все эти операторы тоже разделить точкой с запятой. Так что ли?
Так. Точкой с запятой разделяются операторы в одном блоке, а запятая используется совсем для другого и операторы разделять не может. Запятая используется для разделения параметров (функций, условий, прочее), но никак не операторов.

Nataly-Mak в сообщении #1058750 писал(а):
Мне нужен ответ автора курса.
Тогда пишите ЛС, а спрашивая тут вы спрашиваете любого кто разбирается в языке и может ответить.

Nataly-Mak в сообщении #1058750 писал(а):
что вы можете сказать о быстроте выполнения оператора forprime :?:
Мне кажется, он выполняется очень медленно по сравнению с аналогичной программкой Vovka17, написанной совсем на другом языке.
forprime использует nextprime, которая использует ispseudoprime. И разумеется всё это не быстро. Хотя бы потому, что выполняется проверка каждого числа отдельно, а не решетом прореживаются сразу тысячи чисел, потому для не слишком больших чисел (скажем до тех же $10^{19}$) получение списка последовательных простых чисел в primesieve будет работать быстрее и forprime и nextprime.
Вот проверка одного числа на простоту быстрее выполнится через ispseudoprime, чем через primesieve. А через isprime - думаю медленнее, очень я сомневаюсь что isprime так же хорошо оптимизирована, как primesieve.
Поиск же даже одного следующего простого числа может быть быстрее как через nextprime, так и через primesieve, смотря какой величины интервал до следующего простого.
Ну и в конце концов, включите timer в PARI/GP и замерьте скорости работы самостоятельно!

-- 03.10.2015, 21:06 --

maxal
Очень нехватает информации как закомментировать кусок кода на PARI/GP.

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


09/02/09
2089
Минск, Беларусь
Nataly-Mak в сообщении #1058770 писал(а):
У меня оба оператора
Код:
i=q-n, print(i)

должны выполниться, если условие выполняется!
Понимаете, оба.
Это здесь давным-давно поняли все. Раз оба, значит разделяйте их точкой с запятой.

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


10/07/15
286
Dmitriy40 в сообщении #1058889 писал(а):
Очень не хватает информации как закомментировать кусок кода на PARI/GP.
Как в С
пара /* */ в любом месте
Код:
/*
operators
*/
2 вариант в конце строки или на одной строке
Код:
operators; \\ комментарий
\\a=b+c;

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


27/04/09
28128

(На сей вопрос можно ничего отвечать, я просто мимо проходил.)

А ; в этом языке, часом, ещё и не операция, возвращающая значение последнего выражения? (Типа запятой в C, типа той же ; в Wolfram?) Тогда лично для меня всё кристально, хотя, конечно, поначалу людей может удивлять, что ;, в естественных языках обычно менее приоритетная, чем ,, ведёт себя наоборот.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 810 ]  На страницу Пред.  1 ... 3, 4, 5, 6, 7, 8, 9 ... 54  След.

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



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

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


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

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