Re: FactorInteger Print Formatting
- To: mathgroup at christensen.cybernetics.net
- Subject: [mg700] Re: [mg650] FactorInteger Print Formatting
- From: Count Dracula <lk3a at kelvin.seas.virginia.edu>
- Date: Mon, 10 Apr 1995 14:55:23 -0400
"Powell" == Alan Powell <POWELLA at delphi.com> writes:
Powell> Could anyone suggest a neat way to reformat the output of
Powell> FactorInteger into a more usable print format?
Powell> FactorInteger[n] gives a list of prime factors of the integer n
Powell> in ascending order, together with their exponents viz:
FactorInteger[900] produces the list {{2,2},{3,2},{5,2}}
Powell> What I need is a function called say factorform[list] such
Powell> that:
Print[ factorform[{{2,2},{3,2},{5,2}}] ] produces 2^2*3^2*5^2
Powell> Ideally exponents equal to 1 would be suppressed so that when
ff = FactorInteger[30] produces {{2,1},{3,1},{5,1}} then
Print[factorform[ff]] would give 2*3*5 instead of 2^1*3^1*5^1 and
Print[factorform[FactorInteger[2^6*3*5^2*7]]] would give 2^6*3*5^2*7
Powell> A procedural solution is possible, but I was unable to create a
Powell> simple function which would give the desired result.
The function fa gives a String that will be printed as required:
fa[1] = "1"
fa[k_Integer] := StringDrop[StringJoin[FactorInteger[k] /.
{{n_, 1} :> StringJoin[ToString[n], "*"],
{n_Integer, m_} :> StringJoin[ToString[n], "^", ToString[m], "*"]}], -1]
For example:
In[3]:= fa[900]
Out[3]= 2^2*3^2*5^2
In[4]:= fa[997]
Out[4]= 997
In[5]:= fa[-98]
Out[5]= -1*2*7^2
In[6]:= fa[9]
Out[6]= 3^2
In[7]:= fa[842]
Out[7]= 2*421
In[8]:= fa[9735]
Out[8]= 3*5*11*59
___________________________________________________________________________________
Levent Kitis lk3a at cars.mech.virginia.edu lk3a at kelvin.seas.virginia.edu
University of Virginia Department of Mechanical, Aerospace and Nuclear Engineering
___________________________________________________________________________________