--- /dev/null
+import math
+
+# Berechnet die Summe aller vielfachen von base bis max
+def summandial(m,base=1):
+ m = int(m/base)*base
+ return m*(m+base)/(2*base)
+
+# Gibt die naechst kleine Fib zu max zurueck
+def fib(m):
+ a,b = 1,2
+ while b < m:
+ a,b = b,a+b
+ return a
+
+# Gibt die Liste aller Fib zur naechst kleineren Fib von max zurueck
+def fibV(m):
+ a = [1, 2]
+ i = 1;
+ while a[i] < m:
+ a.append(a[i] + a[i-1])
+ i = i+1
+ return a
+
+# Gibt die Summe aller d-fachen Fib zu max zurueck (d=2)
+def fibS(m,d=2):
+ a,b = 1,2
+ s = 0
+ while b < m:
+ a,b = b,a+b
+ if a%d == 0:
+ s = s +a
+ return s
+
+# Gibt alle Primzahlen bis n zurueck
+def primes(n):
+ if n < 2:
+ return 0
+ p = range(1,n+1,2)
+ q = len(p);
+ p[0] = 2;
+ for k in range(3,int(n**.5+1),2):
+ if p[(k-1)/2]:
+ for i in range(((k*k-1)/2),q,k):
+ p[i] = 0
+ return filter(lambda x:x>0,p)
+
+# Gibt alle Primfaktoren von n zurueck
+def factor(n):
+ if n<4:
+ return [n]
+ p = primes(int(n**.5+1))
+ f = []
+ while n>1:
+ p = filter(lambda x:n%x==0,p)
+ if(p==[]):
+ f.append(n)
+ break
+ f[len(f):] = p
+ n = n/prod(p)
+ f.sort()
+ return f
+
+# Gibt alle Primfaktoren von n als vektor mit Vielfachheit zurueck
+def factorD(n):
+ if n<4:
+ return {n:1}
+ p = primes(int(n**.5+1))
+ f = {}
+ while n>1:
+ p = filter(lambda x:n%x==0,p)
+ if(p==[]):
+ f[n] = 1
+ break
+ for i in range(len(p)):
+ if(p[i] in f):
+ f[p[i]]=f[p[i]]+1
+ else:
+ f[p[i]]=1
+ n = n/prod(p)
+# f.sort()
+ return f
+
+# Multipliziert alle Werte aus Liste seq auf
+def prod(seq):
+ return reduce(lambda x,y:x*y, seq, 1)
+
+# generiert Pyth tripel
+def pythtrip(u,v):
+ return [u*u-v*v, 2*u*v, u*u+v*v]
+
+#Binomial Koeffizient
+def binomial(n,k):
+ return math.factorial(n)/(math.factorial(k)*math.factorial(n-k))
+
+def ebinomial(seq):
+ vek = [1, 0]
+ for i in seq:
+ for j in range(len(vek)-1,0,-1):
+ vek[j] = vek[j]+vek[j-1]*i
+ vek[len(vek):]=[0]
+
+ return vek[:len(vek)-1]
+
+#Anzahl der Teiler
+def divisors(num):
+ test = factorD(num)
+ return sum(ebinomial(map(lambda x:test[x],test.keys()))[1:])+1
\ No newline at end of file
--- /dev/null
+%% This program is free software; you can redistribute it and/or
+%% modify it under the terms of the GNU General Public License
+%% as published by the Free Software Foundation; either version 2
+%% of the License, or (at your option) any later version.
+%%
+%% This program is distributed in the hope that it will be useful,
+%% but WITHOUT ANY WARRANTY; without even the implied warranty of
+%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+%% GNU General Public License for more details.
+%%
+%% You should have received a copy of the GNU General Public License
+%% along with this program; if not, write to the Free Software
+%% Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+%%
+%% Author: Martin R. Ehmsen, ehmsen@imada.sdu.dk.
+%% Department of Mathematics and Computer Science,
+%% University of Southern Denmark, DK
+%%
+%% You can find an online copy of the GPL at
+%% http://www.gnu.org/copyleft/gpl.html .
+%%
+%% Note: shell-escape needs to be activated for this to work.
+%% This can either be done by passing -shell-escape as an option to
+%% latex or by adding/changing "shell_escape = t" in your texmf.cnf .
+
+% 0.2 -> 0.21: Moved \newwrite\@module from \@writemodule and out, since
+% no more than 15 \newwrites are allowed (and the previous version created a new
+% every time \@writemodule was called.
+
+\NeedsTeXFormat{LaTeX2e}[1994/12/01]
+\ProvidesPackage{python}[2007/06/07 v0.21 Python in LaTeX]
+
+\newwrite\@out
+\newwrite\@module
+
+\begingroup \catcode `|=0 \catcode `[=1
+\catcode`]=2 \catcode `\{=12 \catcode `\}=12
+\catcode`\\=12 |gdef|@xpython#1\end{python}[|immediate|write|@out[#1]|end[python]]
+|endgroup
+
+\def\python{\kernel@ifnextchar [{\@python}{\@python[]}}
+
+
+\newcounter{py@codenum}
+\def\@python[#1]{%
+\stepcounter{py@codenum}
+\gdef\@pythoninclude{#1}
+\immediate\openout\@out=\jobname.py
+\newlinechar='15
+\begingroup \catcode`\^^M=12 %
+\let\do\@makeother\dospecials\obeyspaces%
+\@xpython}
+
+\def\endpython{%
+\endgroup
+\immediate\closeout\@out
+\@writemodule
+\immediate\write18{python\space\jobname.py > \jobname.py.\thepy@codenum.out 2> \jobname.py.\thepy@codenum.err}
+\immediate\input\jobname.py.\thepy@codenum.out}
+
+
+
+% \def\@python[#1]{%
+% \gdef\@pythoninclude{#1}
+% \immediate\openout\@out=\jobname.py
+% \newlinechar='15
+% \begingroup \catcode`\^^M=12 %
+% \let\do\@makeother\dospecials\obeyspaces%
+% \@xpython}
+%
+% \def\endpython{%
+% \endgroup
+% \immediate\closeout\@out
+% \@writemodule
+% \immediate\write18{cat \@pythoninclude\space\jobname.py | python > \jobname.py.out 2> \jobname.py.err}
+% \immediate\input\jobname.py.out}
+% %\immediate\write{\begin{verbatim}}
+% %\immediate\input\jobname.py.err
+% %\immediate\write{\end{verbatim}}}
+
+\def\@writemodule{%
+\immediate\openout\@module=latex.py
+\immediate\write\@module{jobname="\jobname"}
+\immediate\closeout\@module}
+
+% BUGS:
+% 1. If anything gets send to stderr then it should be included
+% in \begin{verbatim}...\end{verbatim} to be properly displayed
+%
+% \immediate\write18{cat \@pythoninclude\space\jobname.py | python > \jobname.py.out 2>\jobname.py.err}
+%
+% 2. Watch out for indentation done by aucTeX in Emacs
+%
+% 3. Let the package accept a "final version" option, such
+% that the output of each python run is saved such that it can be
+% inserted into the document by hand
+% (conference, journals are not likely to compile with
+% shell_escape or have python).
+%
+% \gdef\@prepython{}
+% \def\prepython#1{%
+% \gdef\@prepython{#1}
+% }
+% sed -e 's/^ //g' cluster.py
+% \immediate\write18{\@prepython\space\jobname.py > \
\ No newline at end of file