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
в стандартных программах, во избежание этого преобразования и уменьшить время выполнения.