ifactor
Раскладывает целое число на простые множители
Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.
Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразуют Notebook MuPAD в Live скрипты MATLAB.
ifactor(n
, <UsePrimeTab
>) ifactor(<PrimeLimit>)
ifactor(n)
вычисляет главную факторизацию n = s p1e1 … p r e r целочисленного n, где s является знаком n, p 1, …, p r отличные положительные главные делители n и e 1, …, e, r является положительными целыми числами.
Результат ifactor
объект доменного типа Factored
. Позвольте f:= ifactor(n)
будьте таким объектом. Внутренне, это представлено list[s, p1, e1, ..., pr, er]
из нечетной длины 2 r + 1, где r является количеством отличных главных делителей n. i p не обязательно сортируется по величине.
Можно извлечь знак s и условия p i e i посредством оператора индекса [ ]
, т.е. f[1] = p1^e1, f[2] = p2^e2, ...
для положительного n и f[1] = s, f[2] = p1^e1, f[3] = p2^e2, ...
для отрицательного n.
Вызов Factored::factors(f)
дает к списку факторов [p1, p2, ...]
, в то время как Factored::exponents(f)
возвращает список экспонент [e1, e2, ...]
с 1 ≤ i ≤ r.
Факторизация 0, 1, и - 1 урожай один фактор 0, 1, и - 1, соответственно. В этих случаях внутреннее представление является списком [0]
, [1], и
[-1]
, соответственно.
Вызов coerce(f,DOM_LIST)
возвращает внутреннее представление учтенного объекта, т.е. список [s, p1, e1, p2, e2, ...]
.
Обратите внимание на то, что результат ifactor
распечатан как выражение, и оно неявно преобразовано в выражение каждый раз, когда оно обрабатывается далее другими функциями MuPAD®. Например, результат ifactor(12)
распечатан как 2^2*3
, который является выражением типа "_mult"
.
Смотрите Пример 1 для рисунков и страницы справки Factored
для получения дополнительной информации.
Если вам не нужна главная факторизация n
, но только хочу знать, является ли это составным объектом или главный, используйте isprime
вместо этого, который намного быстрее.
ifactor
возвращает ошибку, когда аргумент является номером, но не целым числом. Символьный ifactor
на звонок отвечают, если аргумент не является номером.
Получить главную факторизацию 120, введите:
f := ifactor(120)
Можно получить доступ к условиям этой факторизации с помощью оператора индекса:
f[1], f[2], f[3]
Внутреннее представление f
, а именно, список, аналогичный описанному выше, возвращен следующей командой:
coerce(f, DOM_LIST)
Результат ifactor
объект доменного типа Factored
:
domtype(f)
Эта область реализует некоторые опции для обработки таких объектов. Некоторые из них описаны ниже.
Можно извлечь факторы и экспоненты факторизации также следующим образом:
Factored::factors(f), Factored::exponents(f)
Можно попросить тип факторизации:
Factored::getType(f)
Этот выход означает, что все факторы p i являются главными. Другими возможными типами является "squarefree"
(см. polylib::sqrfree
) или "unknown"
.
Умножение учтенных объектов сохраняет учтенную форму:
f2 := ifactor(12)
f*f2
Важно отметить, что можно применить почти любую функцию, работающую с арифметическими выражениями к объекту доменного типа Factored
. Результат обычно не имеет этого доменного типа:
expand(f); domtype(%)
Для подробного описания этих объектов обратитесь к странице справки доменного Factored
.
Факторизации 0
, 1, и
-1
у каждого есть точно один фактор:
ifactor(0), ifactor(1), ifactor(-1)
map(%, coerce, DOM_LIST)
Внутреннее представление факторизации простого числа p
список [1, p, 1]
:
coerce(ifactor(5), DOM_LIST)
Привязанный таблица простого числа:
ifactor(PrimeLimit)
Мы присваиваем большой простой номер p
:
p := nextprime(10^10); q := nextprime(10^12)
Полностью факторинг 36
номер цифры 6*p^3
занимает время; вторая выходная линия показывает время в секундах:
t := time(): f := ifactor(p^3*q^4); (time() - t)/1000.0
10000000019^3*1000000000039^4
2.5
Factored::getType(f)
"irreducible"
delete f
Извлечение только простые множители в главной таблице намного быстрее, но это не дает к полной факторизации; факторный p 3 остается неанализируемым:
t := time(): f := ifactor(p^3*q^4, UsePrimeTab); (time() - t)/1000.0
1000000005856000011728326008600735477170193366706178119695352530650045867891819
0.015625
Factored::getType(f)
"unknown"
delete f
|
Арифметическое выражение, представляющее целое число |
|
Внутренне, MuPAD сохранил предварительно вычисленную таблицу всех простых чисел до связанного определенного. |
|
Размер этой таблицы может быть изменен через флаг |
Объект доменного типа Factored
, или символьный ifactor
вызвать.
ifactor
использует метод эллиптической кривой.
ifactor
интерфейс к функции ядра stdlib::ifactor
. Это вызывает stdlib::ifactor
с данными аргументами и преобразуют его результат, который является списком [s, p1, e1, ..., pr, er]
аналогичный описанному выше, в объект доменного типа Factored
.
Можно непосредственно вызвать функцию ядра stdlib::ifactor
в ваших стандартных программах, во избежание этого преобразования и уменьшить время выполнения.