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