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 ≤ ir.

Факторизация 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 отвечают, если аргумент не является номером.

Примеры

Пример 1

Получить главную факторизацию 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.

Пример 2

Факторизации 0, 1 и -1 у каждого есть точно один фактор:

ifactor(0), ifactor(1), ifactor(-1)

map(%, coerce, DOM_LIST)

Внутреннее представление факторизации простого числа p является списком [1, p, 1]:

coerce(ifactor(5), DOM_LIST)

Пример 3

Привязанный таблица простого числа:

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

Параметры

n

Арифметическое выражение, представляющее целое число

Опции

UsePrimeTab

Внутренне, MuPAD сохранил предварительно вычисленную таблицу всех простых чисел до связанного определенного. ifactor(n, UsePrimeTab) только ищет простые множители, которые хранятся в этой внутренней таблице простого числа, извлечениях их от n, и возвращает неанализируемый продукт всех других простых множителей как один фактор. Это обычно намного быстрее, чем без опции UsePrimeTab, но это не обязательно приводит к полной главной факторизации n. Смотрите Пример 2.

PrimeLimit

ifactor(PrimeLimit) возвращает целое число, а именно, привязанный размер простых чисел во внутренней таблице простого числа. Таблица содержит все начала ниже связанного. Значения по умолчанию: 1000000 в системах UNIX® и 300000 на платформах Mac OS и платформах Windows®.

Размер этой таблицы может быть изменен через флаг -L командной строки MuPAD.

Возвращаемые значения

Объект доменного типа Factored или символьный вызов ifactor.

Алгоритмы

ifactor использует метод эллиптической кривой.

ifactor является интерфейсом к функции ядра stdlib::ifactor. Это вызывает stdlib::ifactor с данными аргументами, и преобразуйте его результат, который является списком [s, p1, e1, ..., pr, er], как описано выше в объект доменного типа Factored.

Можно непосредственно вызвать функцию ядра stdlib::ifactor в стандартных программах, во избежание этого преобразования и уменьшить время выполнения.

Смотрите также

Функции MuPAD