2014 dxdy logo

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

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





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

А вам пакет PARI/GP интересен?
Да 84%  84%  [ 37 ]
Нет 5%  5%  [ 2 ]
Не уверен(а) 11%  11%  [ 5 ]
Всего голосов : 44
 
 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
280
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
280
Общий вид 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
280
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
280
Я же привел формат оператора "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
1935
Минск, Беларусь
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
2644
Россия, Москва
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
1935
Минск, Беларусь
Nataly-Mak в сообщении #1058770 писал(а):
У меня оба оператора
Код:
i=q-n, print(i)

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

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


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

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


27/04/09
20138
Уфа

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

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

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

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



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

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


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

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