2014 dxdy logo

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

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




На страницу Пред.  1, 2, 3, 4  След.
 
 Re: Подскажите приложение для вычисления "длинной арифметики"?
Сообщение11.08.2021, 08:42 
wrest в сообщении #1528497 писал(а):
write(filename,{str}*): appends the remaining arguments (same output as print) to filename.


Не понял как пользоваться командой write в данном случае. После двоеточия указывать путь до файла? Ругается на синтаксическую ошибку начиная с {str}*. Я же правильно понимаю - этот код пишет все строки в файл?

-- 11.08.2021, 08:49 --

Еще вопрос, а как оперировать с данным число в рамках этого пакета? Допустим я захочу произвести факторизацию числа:
factorint(2^123456789)
Но так не работает - происходит факторизация числа 123456789.

Или сложение двух чисел (2^123456789) + (2^987654321) :?:

 
 
 
 Re: Подскажите приложение для вычисления "длинной арифметики"?
Сообщение11.08.2021, 09:21 
uzlprog в сообщении #1528503 писал(а):
Не понял как пользоваться командой write в данном случае.

Как-то так:
write("text.txt",2^12345678)
Учтите что функция добавляет вывод к имеющемуся содержимому, если файл уже существует.
Потренируйтесь на функции print() с небольшими числами. Функция write() работает так же как print(), но выводит не на экран, а в файл.

-- 11.08.2021, 09:27 --

uzlprog в сообщении #1528503 писал(а):
Еще вопрос, а как оперировать с данным число в рамках этого пакета? Допустим я захочу произвести факторизацию числа:
factorint(2^123456789)
Но так не работает - происходит факторизация числа 123456789.

Там по каждой функции есть встроенная справка, вызывается так
? factorint
или
?? factorint - это расширенная
uzlprog в сообщении #1528503 писал(а):
Но так не работает - происходит факторизация числа 123456789.

Почему не работает? У меня даёт
? factorint(2^12345678)
%1 =
[2 12345678]
?

То есть множитель 2 повторяется 12345678 раз.

-- 11.08.2021, 09:41 --

uzlprog в сообщении #1528503 писал(а):
Или сложение двух чисел (2^123456789) + (2^987654321)

Ну так и будет. Можете присвоить какой-то переменной, например
x=(2^123456789) + (2^987654321);
Только стек увеличьте (тут гигабайтом не обойдешься, кмк, увеличьте до 4 гигабайт:)
Обратите внимание на точку с запятой -- она в данном случае предотвращает вывод на экран результата.

-- 11.08.2021, 09:53 --

uzlprog в сообщении #1528503 писал(а):
Еще вопрос, а как оперировать с данным число в рамках этого пакета?

Вообще, тут вам надо бы, наверное, пока попробовать с небольшими числами, чтобы все быстро было и обозримо на экране. У нас есть тема на форуме (я давал ссылку выше «интерактивный курс: введение в программирование на PARI/GP»), ну и документация на pari/gp есть на сайте.
Вот это очень кратко, прям может напечатайте https://pari.math.u-bordeaux.fr/pub/par ... efcard.pdf

Вот тут довольно хорошо написано живым языком для начинающих https://pari.math.u-bordeaux.fr/pub/par ... torial.pdf

Ну и полный юзергайд-справочник: https://pari.math.u-bordeaux.fr/pub/par ... /users.pdf и он же онлайн: https://pari.math.u-bordeaux.fr/dochtml/html-stable/

 
 
 
 Re: Подскажите приложение для вычисления "длинной арифметики"?
Сообщение11.08.2021, 14:16 
wrest, огромное спасибо. А чисто физически сколько займет факторизация подобных чисел по размеру разрядов. Я имею ввиду не $2^N $, а вообще до 40 млн. цифр. Просто не знаю как подсчитать затрачиваемую производительность для данного пакета.

Еще практический вопрос: а можно как-то вывести в файл листинг из консоли? Там и время старта и окончания операций есть и в целом очень наглядно 8-)

 
 
 
 Re: Подскажите приложение для вычисления "длинной арифметики"?
Сообщение11.08.2021, 14:36 
uzlprog в сообщении #1528519 писал(а):
огромное спасибо. А чисто физически сколько займет факторизация подобных чисел по размеру разрядов. Я имею ввиду не $2^N $, а вообще до 40 млн. цифр.

Ну сейчас криптостойкими (не поддающимися факторизации) считаются ключи длиной 2048 бит. Это 600 с чем-то десятичных цифр.

-- 11.08.2021, 14:39 --

uzlprog в сообщении #1528519 писал(а):
Еще практический вопрос: а можно как-то вывести в файл листинг из консоли?

Можно, надо включить лог командой
? \l log.txt
logfile = "log.txt"
log = 1 (on)
?

после этого все будет дублироваться в файл. Выключается этой же командой без аргументов
? \l
log = 0 (off)
[logfile was "log.txt"]
?

 
 
 
 Re: Подскажите приложение для вычисления "длинной арифметики"?
Сообщение11.08.2021, 14:56 
Цитата:
Ну сейчас криптостойкими (не поддающимися факторизации) считаются ключи длиной 2048 бит. Это 600 с чем-то десятичных цифр.


Да, осознал "фишку" вопроса своего. :lol:

 
 
 
 Re: Подскажите приложение для вычисления "длинной арифметики"?
Сообщение11.08.2021, 17:12 
Подскажите, а как запускать примеры в .gp формате??

 
 
 
 Re: Подскажите приложение для вычисления "длинной арифметики"?
Сообщение11.08.2021, 18:46 
uzlprog в сообщении #1528529 писал(а):
Подскажите, а как запускать примеры в .gp формате??

\r primer.gp

 
 
 
 Re: Подскажите приложение для вычисления "длинной арифметики"?
Сообщение12.08.2021, 15:51 
wrest в сообщении #1528533 писал(а):
uzlprog в сообщении #1528529 писал(а):
Подскажите, а как запускать примеры в .gp формате??

\r primer.gp


Спасибо!

Подскажите как мне сделать проверку делимости большого числа на определенные делители. Хочу создать свой скрипт .gp

Пусть у меня есть некое число n:

n=2^123456

Есть набор делителей для проверки, допустим: [425, 1025, 1456, 2056]. Я так понимаю их можно загнать в массив:

MASSIVE=[425, 1025, 1456, 2056]

DELIMOST(n)={

??? // типо если делится n на любое число из массива то return(0), если нет return(1)

}


-- 12.08.2021, 15:52 --

Ни как не соображу как сделать прогон по массиву делителей и вернуть результат...

-- 12.08.2021, 15:59 --

Нужно что-то вроде:

Используется синтаксис Python
print('YES' if a % b == 0 else 'NO')

 
 
 
 Re: Подскажите приложение для вычисления "длинной арифметики"?
Сообщение12.08.2021, 16:27 
uzlprog в сообщении #1528574 писал(а):
типо если делится n на любое число из массива то return(0), если нет return(1)
...
Нужно что-то вроде:

print('YES' if a % b == 0 else 'NO')



Например так
DELIMOST(n,v)=for(i=1,#v,if(n % v[i] == 0, return(0)));return(1)
Фунция принимает два аргумента: n - что делить, v - массив на что делить.
Тут без print(), функция просто возвращает 0 если делится и 1 если не делится :

Примеры запуска:
? DELIMOST(425*1025,[425, 1025, 1456, 2056])
%1 = 0
? M=[425, 1025, 1456, 2056];
? DELIMOST(12345,M)
%3 = 1
? DELIMOST(2^123456,M)
%4 = 1
?


Печатаем:
? if(DELIMOST(2^12345,M),print("NO"),print("YES"))
NO
?

 
 
 
 Re: Подскажите приложение для вычисления "длинной арифметики"?
Сообщение12.08.2021, 19:18 
wrest в сообщении #1528575 писал(а):
uzlprog в сообщении #1528574 писал(а):
типо если делится n на любое число из массива то return(0), если нет return(1)
...
Нужно что-то вроде:

print('YES' if a % b == 0 else 'NO')



Например так
DELIMOST(n,v)=for(i=1,#v,if(n % v[i] == 0, return(0)));return(1)
Фунция принимает два аргумента: n - что делить, v - массив на что делить.
Тут без print(), функция просто возвращает 0 если делится и 1 если не делится :

Примеры запуска:
? DELIMOST(425*1025,[425, 1025, 1456, 2056])
%1 = 0
? M=[425, 1025, 1456, 2056];
? DELIMOST(12345,M)
%3 = 1
? DELIMOST(2^123456,M)
%4 = 1
?


Печатаем:
? if(DELIMOST(2^12345,M),print("NO"),print("YES"))
NO
?


Благодарность Вам!!

А если не из массива брать, а просто от 1 до допустим sqrt(n) ?

Я сделал что-то такое (по типу теста на простоту):

Delimost(n)={
for(i=1,i<=sqrt(n),i+=1,
if (n % i == 0, return(0))
);
return(1)
}


Но ругается на лишние аргументы.... :shock: Что не так? Или синтаксис i+=1 не правильный?

Как сделать вывод конкретных делителей числа n?

 
 
 
 Re: Подскажите приложение для вычисления "длинной арифметики"?
Сообщение12.08.2021, 19:33 
uzlprog в сообщении #1528588 писал(а):
Что не так? Или синтаксис i+=1 не правильный?

Неправильный, наберите
? for
или
?? for
Правильный:
Delimost(n)={
for(i=2,floor(sqrt(n)),
if (n % i == 0, return(0))
);
return(1)
}


-- 12.08.2021, 19:36 --

uzlprog в сообщении #1528588 писал(а):
а просто от 1

На 1 без остатка делится всё :mrgreen: Начинаем с 2-х

 
 
 
 Re: Подскажите приложение для вычисления "длинной арифметики"?
Сообщение12.08.2021, 19:37 
wrest в сообщении #1528590 писал(а):
uzlprog в сообщении #1528588 писал(а):
Что не так? Или синтаксис i+=1 не правильный?

Неправильный, наберите
? for
или
?? for
Правильный:
Delimost(n)={
for(i=2,floor(sqrt(n)),
if (n % i == 0, return(0))
);
return(1)
}


Спасибо.

 
 
 
 Re: Подскажите приложение для вычисления "длинной арифметики"?
Сообщение12.08.2021, 19:38 
uzlprog в сообщении #1528588 писал(а):
Как сделать вывод конкретных делителей числа n?

Не знаю что значит конкретных, но вот, выводит все делители (возвращает массив со всеми делителями): divisors(n)

В функции которая у вас считала есть ли хотя бы один делитель, чтобы выводить все делители, надо, ессно, не останавливать цикл при нахождении первого, а продолжать до конца, если я вас правильно понял. return() немедленно останавливает выполнение функции, выходит из всех циклов и т.п.

 
 
 
 Re: Подскажите приложение для вычисления "длинной арифметики"?
Сообщение12.08.2021, 19:39 
Цитата:
На 1 без остатка делится всё :mrgreen: Начинаем с 2-х


:facepalm: :D

-- 12.08.2021, 19:45 --

wrest в сообщении #1528592 писал(а):
uzlprog в сообщении #1528588 писал(а):
Как сделать вывод конкретных делителей числа n?

Не знаю что значит конкретных, но вот, выводит все делители: divisors(n)


Для больших чисел я думаю это попросту зависнет. Я так понимаю вывод будет уже после выполнения поиска всех делителей?
А если число гигантское и мне нужно по сути найти делители в промежутке от 1 до M. Но это М будет зависеть от времени работы скрипта. То есть я бы хотел видеть вывод текущего значения i. Это можно организовать как-то динамически?

 
 
 
 Re: Подскажите приложение для вычисления "длинной арифметики"?
Сообщение12.08.2021, 19:50 
uzlprog в сообщении #1528593 писал(а):
Для больших чисел я думаю это попросту зависнет. Я так понимаю вывод будет уже после выполнения поиска всех делителей?

Да, возвращает массив с делителями целиком. Для больших чисел, если делители тоже только большие, факторизация может конечно долго работать, ну это обсуждали выше.

 
 
 [ Сообщений: 47 ]  На страницу Пред.  1, 2, 3, 4  След.


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group