Code covered by the BSD License  

Highlights from
Variable Precision Integer Arithmetic

  • demo_vpi
  • base2vpi(B,base) bin2vpi: converts an integer in an arbitrary base into vpi (decimal) form
  • bin2vpi(B) bin2vpi: converts a binary representation of an integer into vpi (decimal) form
  • binomfactors(n,k) binomfactors: list all factors of the binomial coefficient nchoosek(n,k)
  • catdigits(N,M) catdigits: concatenates the digits of N and M into an aggregate number
  • createPrimesList createPrimesList - For users of older matlab releases, this function will generate a compatible _primeslist_ file
  • factorialfactors(n) factorialfactors: efficient computation of the prime factors of factorial(n)
  • fibonacci(n) fibonacci: vpi tool to efficiently compute the n'th Fibonacci number and the n'th Lucas number
  • getprimeslist loads the primeslist file, and decompresses it, returning the list of primes up to 2^26
  • ispalindrome(N) ispalindrome: test if the number N (vpi or numeric, or a digit string as a vector) is a palindrome
  • iszero(INT) vpi/iszero: test to see if a numeric object is zero
  • legendresymbol(a,p) legendresymbol: computes the legendre symbol (a/p) for prime p
  • lineardiophantine(A,B,C) lineardiophantine: solve the linear Diophantine equation, A*x + B*y = C
  • mersenne(p) mersenne: identify whether 2^p-1 is a Mersenne prime, using the Lucas-Lehmer test
  • minv(a,p)
  • modfibonacci(n,modulus) fibonacci: compute the n'th Fibonacci number and the n'th Lucas number, all modulo a given value
  • modrank(A,p) modrank: compute the rank of an integer array, modulo p
  • modroot(a,p)
  • modsolve(A,rhs,p)
  • nextprime(N,direction,kprimes) nextprime: finds the next larger prime number directly above (or below) N
  • numberOfPartitions(N) numberOfPartitions: compute the number of partitions of the positive integer n
  • powermod(a,d,n) vpi/powermod: Compute mod(a^d,n)
  • quadraticresidues(N) quadraticresidues: returns a list of the possible quadratic residues of the integer N
  • quotient(numerator,denominato... quotient: divides two integers, computing a quotient and remainder
  • subfactorial(N) subfactorial: The subfactorial of an integer (or integers) N, known as !N
  • totient(N) vpi/totient: the number of positive integers less than N that are coprime to N
  • vpi(N) vpi: Creator function for a variable precision integer
  • View all files
from Variable Precision Integer Arithmetic by John D'Errico
Arithmetic with integers of fully arbitrary size. Arrays and vectors of vpi numbers are supported.

catdigits(N,M)
function P = catdigits(N,M)
% catdigits: concatenates the digits of N and M into an aggregate number
% usage: P = catdigits(N,M)
%
% arguments:
%  N,M - any numeric or vpi integer, scalar or arrays
%        Scalar N or M will be expanded to match their
%        counterparts.
%
%  P   - a vpi array of concatenated numbers, of the
%        same size and shape as N and M
%
% Example:
%  catdigits(23,0:5)
% ans =
%   230   231   232   233   234   235
%
%  catdigits(0:5,23)
% ans =
%    23   123   223   323   423   523
%
%  catdigits(eye(3),magic(3))
% ans =
%    18    1    6
%     3   15    7
%     4    9   12
%
%  See also: digits
%
%  Author: John D'Errico
%  e-mail: woodchips@rochester.rr.com
%  Release: 1.0
%  Release date: 5/8/09


if nargin ~= 2
  error('Exactly 2 arguments required')
end

nN = numel(N);
nM = numel(M);

if (nN == 0) || ((nN == 1) && (N == 0))
  P = M;
elseif (nM == 0)
  P = N;
elseif ((nN*nM) == 1)
  % both are scalars
  N = vpi(N);
  M = vpi(M);
  
  P = digits(N,[digits(N),digits(M)]);
elseif (nN == 1)
  % N is a scalar, do scalar expansion
  P = vpi(M);
  for i = 1:nM
    P(i) = catdigits(N,M(i));
  end
elseif (nM == 1)
  % M is a scalar, do scalar expansion
  P = vpi(N);
  for i = 1:nN
    P(i) = catdigits(N(i),M);
  end
elseif all(size(N) == size(M))
  % two arrays of the same size and shape
  P = vpi(N);
  for i = 1:nN
    P(i) = catdigits(N(i),M(i));
  end
else
  % N and M are incompatible
  error('N and M are incompatible in shape or size for digit concatenation')
end



Contact us at files@mathworks.com