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.

ispalindrome(N)
function result = ispalindrome(N)
% ispalindrome: test if the number N (vpi or numeric, or a digit string as a vector) is a palindrome
% usage: result = ispalindrome(N)
% 
% When N is a scalar (vpi or numeric), ispalindrome
% tests if the number is itself a palindrome. When 
% 
% When N is a vector, ispalindrome tests that the
% sequence it represents is a palindromic sequence.
%
%   http://en.wikipedia.org/wiki/Palindrome
%   http://en.wikipedia.org/wiki/Lychrel_number
%
% Arguments: (input)
%  N - may be a scalar vpi or numeric integer,
%      or ANY vector.
%
% Arguments: (output)
%  result - (boolean) true or false, depending upon
%      whether the number or sequence represents a 
%      palindrome.
%
%
% Example:
%  ispalindrome(3234)
% ans =
%      0
%
%  ispalindrome(vpi('122222212222221'))
% ans =
%      1
%
%  ispalindrome('abcdefghihgfedcba')
% ans =
%      1
%
%  ispalindrome([3 4 5 1 1 3 4 5])
% ans =
%      0
%
%
%  See also: digits
%  
% 
%  Author: John D'Errico
%  e-mail: woodchips@rochester.rr.com
%  Release: 1.0
%  Release date: 4/22/09

% test the input
if nargin ~= 1
  error('ispalindrome acceppts only one argument')
end

if isempty(N)
  % empty propagates to empty
  result = [];
elseif numel(N) > 1
  % N must then be a vector. test if the vector
  % itself is a palindromic one.
  if ~isvector(N)
    error('N may not be an array')
  end
  
  % N must have been a vector
  N = N(:);
  result = all(flipud(N(:)) == N);
else
  % N was a scalar
  
  % is it a vpi number?
  if isa(N,'vpi')
    d = digits(N);
    result = all(fliplr(d) == d);
  else
    % N is a scalar, but not a vpi scalar
    
    % N must be numeric
    if ~isnumeric(N) || (N ~= round(N))
      error('N must be integer')
    end
    
    % extract the digits
    N = abs(N);
    d = dec2base(N,10);
    result = all(fliplr(d) == d);;
    
  end
  
end






Contact us at files@mathworks.com