2014 dxdy logo

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

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




Начать новую тему Ответить на тему На страницу Пред.  1, 2, 3, 4  След.
 
 Re: Подскажите приложение для вычисления "длинной арифметики"?
Сообщение11.08.2021, 08:42 


10/08/21
30
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 


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


10/08/21
30
wrest, огромное спасибо. А чисто физически сколько займет факторизация подобных чисел по размеру разрядов. Я имею ввиду не $2^N $, а вообще до 40 млн. цифр. Просто не знаю как подсчитать затрачиваемую производительность для данного пакета.

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

 Профиль  
                  
 
 Re: Подскажите приложение для вычисления "длинной арифметики"?
Сообщение11.08.2021, 14:36 


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


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


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

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


10/08/21
30
Подскажите, а как запускать примеры в .gp формате??

 Профиль  
                  
 
 Re: Подскажите приложение для вычисления "длинной арифметики"?
Сообщение11.08.2021, 18:46 


05/09/16
12056
uzlprog в сообщении #1528529 писал(а):
Подскажите, а как запускать примеры в .gp формате??

\r primer.gp

 Профиль  
                  
 
 Re: Подскажите приложение для вычисления "длинной арифметики"?
Сообщение12.08.2021, 15:51 


10/08/21
30
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 


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


10/08/21
30
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 


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


10/08/21
30
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 


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

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

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

 Профиль  
                  
 
 Re: Подскажите приложение для вычисления "длинной арифметики"?
Сообщение12.08.2021, 19:39 


10/08/21
30
Цитата:
На 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 


05/09/16
12056
uzlprog в сообщении #1528593 писал(а):
Для больших чисел я думаю это попросту зависнет. Я так понимаю вывод будет уже после выполнения поиска всех делителей?

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

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

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



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

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


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

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