var gem_br=1==1;

function skalarmult(s,v)
{
	for(var i=0;i<v.length;i++){multb(v[i],s);}
}
function vektoradd(a,b)
{
	for(var i=0;i<a.length;i++)addb(a[i],b[i]);
}
function vektorsub(a,b)
{
	for(var i=0;i<a.length;i++)subb(a[i],b[i]);
}
function skalarprodukt(a,b)
{
	var i,s=new Array(0,1),p=new Array(2);
	for(i=0;i<a.length;i++)
	{
		setb(p,a[i]);multb(p,b[i]);addb(s,p);
	}
	return s;
}
function abstandq(a,b)
{
	var i,s=new Array(0,1),p=new Array(0,1),d=new Array(0,1),ss=0,pp;
	for(i=0;i<a.length;i++)
	{
		setb(d,b[i]);
		subb(d,a[i]);
		multb(d,d);
		addb(s,d);
		p=a[i][0]/a[i][0]-b[i][0]/b[i][1];
		ss+=p*p;
	}
	if((Math.abs(s[0])==Number.POSITIVE_INFINITY)||(s[1]==Number.POSITIVE_INFINITY)){s[0]=ss;s[1]=1;}
	return s;
}
function betragq(v)
{
	b=new Array(0,1);a=new Array(0,1);ss=0;
	for(var i=0;i<v.length;i++){setb(b,v[i]);multb(b,b);addb(a,b);ss+=v[i][0]/v[i][1]*v[i][0]/v[i][1];}
	if((Math.abs(a[0])==Number.POSITIVE_INFINITY)||(a[1]==Number.POSITIVE_INFINITY)){a[0]=ss;a[1]=1;}
	return a;
}
function cosw(a,b)
{
	var s=skalarprodukt(a,b);
	var baq=betragq(a),bbq=betragq(b);
	return s[0]/s[1]/Math.sqrt(baq[0]*bbq[0]/baq[1]/bbq[1]);
}
function vektorprodukt(a,b)
{
	if(a.length<3)return null;
//	[a1·b2-a2·b1,a2·b0-a0·b2,a0·b1-a1·b0]
	var p=new Array(0,1),q=new Array(0,1),r=new Array(3);
	setb(p,a[1]);multb(p,b[2]);setb(q,a[2]);multb(q,b[1]);subb(p,q);r[0]=new Array(p[0],p[1]);
	setb(p,a[2]);multb(p,b[0]);setb(q,a[0]);multb(q,b[2]);subb(p,q);r[1]=new Array(p[0],p[1]);
	setb(p,a[0]);multb(p,b[1]);setb(q,a[1]);multb(q,b[0]);subb(p,q);r[2]=new Array(p[0],p[1]);
	return r;
}
function lotpunkt(p,ov,rv)
{
	var lm=lambdaminpg(p,ov,rv);
	var q=new Array();setv(q,rv);
	skalarmult(lm,q);
	vektoradd(q,ov);
	return q;
}
// Gerade:a,b; Ebene:c,d,e
function schnittge(a,b,c,d,e)
{
	var n=skalarprodukt(b,vektorprodukt(d,e));
	if(n[0]==0)return null;
	//p1 = (-a0·(d1·e2 - d2·e1) - a1·(d2·e0 - d0·e2) - a2·(d0·e1 - d1·e0) + c0·(d1·e2 - d2·e1) + c1·(d2·e0 - d0·e2) + c2·(d0·e1 - d1·e0))/(b0·(d1·e2 - d2·e1) + b1·(d2·e0 - d0·e2) + b2·(d0·e1 - d1·e0))
	var l=skalarprodukt(c,vektorprodukt(d,e));subb(l,skalarprodukt(a,vektorprodukt(d,e)));divb(l,n);
	var my=skalarprodukt(a,vektorprodukt(b,e));addb(my,skalarprodukt(b,vektorprodukt(c,e)));divb(my,n);my[0]=-my[0];
	//p3 = (a0·(b1·d2 - b2·d1) + a1·(b2·d0 - b0·d2) + a2·(b0·d1 - b1·d0) + b0·(c1·d2 - c2·d1) + b1·(c2·d0 - c0·d2) + b2·(c0·d1 - c1·d0))/(b0·(d1·e2 - d2·e1) + b1·(d2·e0 - d0·e2) + b2·(d0·e1 - d1·e0))
	var ny=skalarprodukt(a,vektorprodukt(b,d));addb(ny,skalarprodukt(b,vektorprodukt(c,d)));divb(ny,n);
	var p=new Array(3);setv(p,b);skalarmult(l,p);vektoradd(p,a);
	return new Array(l,p,my,ny);
}
function spurpunkte(a,b)
{
	var yz=new Array(new Array(0,1),new Array(0,1),new Array(0,1)),xz=new Array(new Array(0,1),new Array(0,1),new Array(0,1)),xy=new Array(new Array(0,1),new Array(0,1),new Array(0,1));
	var bxy=new Array(0,1),bxz=new Array(0,1),byz=new Array(0,1);
	//z=0:
	if(b[0][0]==0)yz=null;
	else
	{
	//	[y = a1 - a0·b1/b0  z = a2 - a0·b2/b0  b = - a0/b0]
		setb(byz,a[0]);divb(byz,b[0]);byz[0]=-byz[0];
		setb(yz[1],b[1]);multb(yz[1],byz);addb(yz[1],a[1]);
		setb(yz[2],b[2]);multb(yz[2],byz);addb(yz[2],a[2]);
	}
	if(b[1][0]==0)xz=null;
	else
	{
	//	[x = a0 - a1·b0/b1  z = a2 - a1·b2/b1  b = - a1/b1]
		setb(bxz,a[1]);divb(bxz,b[1]);bxz[0]=-bxz[0];
		setb(xz[0],b[0]);multb(xz[0],bxz);addb(xz[0],a[0]);
		setb(xz[2],b[2]);multb(xz[2],bxz);addb(xz[2],a[2]);
	}
	if(b[2][0]==0)xy=null;
	else
	{
	//	[x = a0 - a2·b0/b2  y = a1 - a2·b1/b2  b = - a2/b2]
		setb(bxy,a[2]);divb(bxy,b[2]);bxy[0]=-bxy[0];
		setb(xy[0],b[0]);multb(xy[0],bxy);addb(xy[0],a[0]);
		setb(xy[1],b[1]);multb(xy[1],bxy);addb(xy[1],a[1]);
	}
	return new Array(xy,xz,yz,bxy,bxz,byz);
}
function lambdaminpg(p,ov,rv)
{
	var v=new Array(),d;setv(v,p);vektorsub(v,ov);
	v=skalarprodukt(v,rv);
	divb(v,d=betragq(rv));
	g=ggt(v[0],v[1]);v[0]/=g;v[1]/=g;
	return v;
}

function lambdamingg(a,b,c,d)
{
	var x=new Array(3),y=new Array(3),e,z,n;
	setv(x,c);vektorsub(x,a);skalarmult(betragq(d),x);
	e=skalarprodukt(a,d);subb(e,skalarprodukt(c,d));
	setv(y,d);skalarmult(e,y);
	vektoradd(x,y);z=skalarprodukt(x,b);
	setv(x,d);skalarmult(skalarprodukt(b,d),x);
	n=betragq(b);multb(n,betragq(d));subb(n,skalarprodukt(x,b));
	if(n[0]==0)return null;
	divb(z,n);return z;
}
//zuerst Ebene:a,b,c; dann Gerade:d,e
function lambdaminge(a,b,c,d,e)
{
	var n=skalarprodukt(b,vektorprodukt(c,e));
	if(n[0]==0)return null;
	var z1=skalarprodukt(a,vektorprodukt(b,c));
	var z2=skalarprodukt(b,vektorprodukt(c,d));
	subb(z1,z2);divb(z1,n);
	return z1;
}
function linearkombination(a,b,c,d)
{
	var r,n,z1=new Array(0,1),z2,z3,p1=new Array(3),p2=new Array(3),p3=new Array(3),i;
	if((d==null)&&(c==null))
	{
		for(i=0;i<3;i++)
		{if(a[i][0]!=0){setb(z1,b[i]);divb(z1,a[i]);setv(p1,a);skalarmult(z1,p1);vektorsub(p1,b);if(betragq(p1)[0]==0)return z1;}}
		return null;
	}
	else if((d==null)&&(c!=null))
	{
		var zz1=new Array(0,1),zz2=new Array(0,1),zz3=new Array(0,1),zz6=new Array(0,1),zz4=new Array(0,1),zz5=new Array(0,1),i,i1,i2;
		n=vektorprodukt(a,b);var vpac=vektorprodukt(a,c),vpbc=vektorprodukt(b,c);
		for(i=0;i<3;i++)
		{
			setb(zz1,vpbc[i]);zz1[0]=-zz1[0];divb(zz1,n[i]);
			setb(zz2,vpac[i]);divb(zz2,n[i]);
			setv(p1,a);setv(p2,b);skalarmult(zz1,p1);skalarmult(zz2,p2);vektoradd(p1,p2);vektorsub(p1,c);
			if(betragq(p1)[0]==0)return new Array(zz1,zz2);
		}
		return null;
	}
	n=skalarprodukt(a,vektorprodukt(b,c));
	z1=skalarprodukt(b,vektorprodukt(c,d));divb(z1,n);
	z2=skalarprodukt(a,vektorprodukt(c,d));divb(z2,n);z2[0]=-z2[0];
	z3=skalarprodukt(a,vektorprodukt(b,d));divb(z3,n);
	setv(p1,a);setv(p2,b);setv(p3,c);skalarmult(z1,p1);skalarmult(z2,p2);skalarmult(z3,p3);
	vektoradd(p1,p2);vektoradd(p1,p3);vektorsub(p1,d);
	if(betragq(p1)[0]==0)return new Array(z1,z2,z3);
	return null;
}

//                          a   b    c    d   e   f
function schnittee(a,b,c,d,e,f)
{
	var n1=vektorprodukt(b,c),n2=vektorprodukt(e,f),ov;
	var rv=vektorprodukt(n1,n2);if(betragq(rv)[0]==0)return null;
	machganzzahlig(rv);
	var E1=allgemeineebenengleichung(a,b,c);
	var E2=allgemeineebenengleichung(d,e,f);
	var a1=E1[0],b1=E1[1],c1=E1[2],d1=E1[3],a2=E2[0],b2=E2[1],c2=E2[2],d2=E2[3];
	var x=new Array(0,1),y=new Array(0,1),z=new Array(0,1);if(rv[2][0]==0)setb(z,a[2]);
	var s=new Array(0,1),p=new Array(0,1),n=new Array(0,1);
	setb(n,a1);multb(n,b2);setb(p,a2);multb(p,b1);subb(n,p);if(n[0]!=0)
	{
		//x = (z·(b1·c2 - b2·c1) - b1·d2 + b2·d1)/(a1·b2 - a2·b1)
		setb(x,b1);multb(x,c2);setb(p,b2);multb(p,c1);subb(x,p);multb(x,z);setb(p,b1);multb(p,d2);subb(x,p);setb(p,b2);multb(p,d1);addb(x,p);divb(x,n);
		//y = (z·(a1·c2 - a2·c1) - a1·d2 + a2·d1)/(a2·b1 - a1·b2)
		setb(y,a1);multb(y,c2);setb(p,a2);multb(p,c1);subb(y,p);multb(y,z);setb(p,a1);multb(p,d2);subb(y,p);setb(p,a2);multb(p,d1);addb(y,p);divb(y,n);y[0]=-y[0];
		ov=new Array(x,y,z);return new Array(ov,rv);
	}
	setb(n,a1);multb(n,c2);setb(p,a2);multb(p,c1);subb(n,p);if(n[0]!=0)
	{
		y[0]=0;y[1]=1;if(rv[1][0]==0)setb(y,a[1]);
		setb(x,c1);multb(x,c2);setb(p,c2);multb(p,c1);subb(x,p);multb(x,y);setb(p,c1);multb(p,d2);subb(x,p);setb(p,c2);multb(p,d1);addb(x,p);divb(x,n);
		setb(z,a1);multb(z,c2);setb(p,a2);multb(p,c1);subb(z,p);multb(z,y);setb(p,a1);multb(p,d2);subb(z,p);setb(p,a2);multb(p,d1);addb(z,p);divb(z,n);z[0]=-z[0];
		ov=new Array(x,y,z);return new Array(ov,rv);
	}
	setb(n,b1);multb(n,c2);setb(p,b2);multb(p,c1);subb(n,p);if(n[0]!=0)
	{
		x[0]=0;x[1]=1;if(rv[0][0]==0)setb(x,a[1]);
		setb(y,c1);multb(y,c2);setb(p,c2);multb(p,c1);subb(y,p);multb(y,x);setb(p,c1);multb(p,d2);subb(y,p);setb(p,c2);multb(p,d1);addb(y,p);divb(y,n);
		setb(z,b1);multb(z,c2);setb(p,b2);multb(p,c1);subb(z,p);multb(z,x);setb(p,b1);multb(p,d2);subb(z,p);setb(p,b2);multb(p,d1);addb(z,p);divb(z,n);z[0]=-z[0];
		ov=new Array(x,y,z);return new Array(ov,rv);
	}
}
function koordinatenform(ov,rv1,rv2)
{
	var n=vektorprodukt(rv1,rv2);if(betragq(n)[0]==0)return null;
	var A=new Array(4),i;for(i=0;i<3;i++)A[i]=n[i];A[3]=skalarprodukt(ov,n);
	machganzzahlig(A,1);
	return A;
}
function spurpunktee(a,b,c,d)
{
	px=new Array(new Array(0,1),new Array(0,1),new Array(0,1));
	py=new Array(new Array(0,1),new Array(0,1),new Array(0,1));
	pz=new Array(new Array(0,1),new Array(0,1),new Array(0,1));
	if(d[0]!=0)
	{
		setb(px[0],d);setb(py[1],d);setb(pz[2],d);
		if(a[0]==0)px=null;else divb(px[0],a);if(b[0]==0)py=null;else divb(py[1],b);if(c[0]==0)pz=null;else divb(pz[2],c);
	}
	return new Array(px,py,pz);
}
function allgemeineebenengleichung(ov,rv1,rv2)
{
	return koordinatenform(ov,rv1,rv2);
/*	var v=vektorprodukt(rv1,rv2),n=skalarprodukt(ov,v),a=new Array(0,1),b=new Array(0,1),c=new Array(0,1),d=new Array(1,1),A=new Array(3);
	//alert("v = "+v+"\nn = "+n);
	if(n[0]!=0)
	{
		setb(a,v[0]);divb(a,n);
		setb(b,v[1]);divb(b,n);
		setb(c,v[2]);divb(c,n);
		A=new Array(a,b,c,d);
	}
	else
	{ 
		var i;for(i=0;i<3;i++)if(ov[i][0]==0)break;
		if(i<3)
		{
			var ovv=new Array(3);setv(ovv,ov);addb(ovv[i],new Array(1,1));
			A=allgemeineebenengleichung(ovv,rv1,rv2);
			subb(A[3],A[i]);
		}
		else
		{
			A=vektorprodukt(rv1,rv2);
			for(i=0;i<3;i++){setb(A[i],v[i]);}
			A[3]=new Array(0,1);
		}
	}
	machganzzahlig(A);
	return A;
*/
}
var aegmerki=0;

function vektordarstellungderebene(a,b,c,d)
{
	var ov=new Array(3),rv1=new Array(3),rv2=new Array(3),i,dk=new Array(d[1],d[0]),q=new Array(0,1),eins=new Array(1,1),Null=new Array(0,1),r;
	var A=new Array(a,b,c);
	if((a[0]==0)&&(b[0]==0)&&(c[0]==0))return null;
	for(i=0;i<3;i++){ov[i]=new Array(0,1);rv1[i]=new Array(0,1);rv2[i]=new Array(0,1);}
	if(d[0]!=0)
	{
		if(a[0]!=0){setb(ov[0],a);i=ov[0][1];ov[0][1]=ov[0][0];ov[0][0]=i;}
		else {if(b[0]!=0){setb(ov[1],b);i=ov[1][1];ov[1][1]=ov[1][0];ov[1][0]=i;} 
		else {if(c[0]!=0){setb(ov[2],c);i=ov[2][1];ov[2][1]=ov[2][0];ov[2][0]=i;}
		else return null;}}
		skalarmult(d,ov);
	}
	r=solvediophb(A,d);//alert(r.join("\n"));
	if(r!=null)
	{
		var kl=kleineLoesung(r,1000,false);
		for(i=0;i<3;i++){ov[i][0]=kl[i];ov[i][1]=1;}
		//alert("Diophant: \n"+r.join("\n")+"\n\nOrtsvektor: "+ov.join("   "));
	}
	if(a[0]==0){setb(rv1[1],c);setb(rv1[2],b);rv1[2][0]*=-1;setb(rv2[0],eins);}
	if(b[0]==0){setb(rv1[0],c);setb(rv1[2],a);rv1[2][0]*=-1;setb(rv2[1],eins);}
	if(c[0]==0){setb(rv1[0],b);setb(rv1[1],a);rv1[1][0]*=-1;setb(rv2[2],eins);}
	if((b[0]==0)&&(c[0]==0)){setb(rv1[1],eins);setb(rv1[2],Null);setb(rv2[2],eins);setb(rv2[1],Null);}
	if((a[0]==0)&&(c[0]==0)){setb(rv1[0],eins);setb(rv1[2],Null);setb(rv2[2],eins);setb(rv2[0],Null);}
	if((a[0]==0)&&(b[0]==0)){setb(rv1[0],eins);setb(rv1[1],Null);setb(rv2[1],eins);setb(rv2[0],Null);}
	var sp=skalarprodukt(A,ov);setb(q,sp);subb(q,d);
	if((a[0]!=0)&&(b[0]!=0)&&(c[0]!=0))
	{
		setb(rv1[0],b);setb(rv1[1],a);rv1[1][0]*=-1;
		setb(rv2[0],c);setb(rv2[2],a);rv2[2][0]*=-1;
	}
	machganzzahlig(rv1,1);machganzzahlig(rv2,1);
	return new Array(ov,rv1,rv2);
}
function ebenengleich(a,b,c,d,ov,rv1,rv2)
{
	var v1=new Array(new Array(0,1),new Array(0,1),new Array(0,1)),v2=new Array(3);
	setb(v1[0],a);setb(v1[1],b);setb(v1[2],c);
	setv(v2,ov);
	var t1=skalarprodukt(v1,v2);subb(t1,d);if(t1[0]!=0)return false;
	vektoradd(v2,rv1);
	t1=skalarprodukt(v1,v2);subb(t1,d);if(t1[0]!=0)return false;
	vektoradd(v2,rv2);
	t1=skalarprodukt(v1,v2);subb(t1,d);if(t1[0]!=0)return false;
	return true;
}

function machganzzahlig(a,v)
{
	var i,k,g,neg=0;
	for(i=0;i<a.length;i++)krz(a[i]);k=kgv(a[0][1],a[1][1]);for(i=2;i<a.length;i++)k=kgv(k,a[i][1]);
	for(i=0;i<a.length;i++){a[i][0]*=k/a[i][1];a[i][1]=1;if(a[i][0]<0)neg++;}
	g=ggt(a[0][0],a[1][0]);for(i=2;i<a.length;i++)g=ggt(g,a[i][0]);
	for(i=0;i<a.length;i++)a[i][0]/=g;
	if((v==1)&&(neg>a.length/2))for(i=0;i<a.length;i++)a[i][0]*=-1;
	if(((v==2)&&(a[0][0]<0))||(v==0))for(i=0;i<a.length;i++)a[i][0]*=-1;
}

function addb(a,b)
{
	var z=a[0]*b[1]+a[1]*b[0],n=a[1]*b[1];a[0]=z;a[1]=n;krz(a);
}
function subb(a,b)
{
	var z=a[0]*b[1]-a[1]*b[0],n=a[1]*b[1];a[0]=z;a[1]=n;krz(a);
}
function multb(a,b)
{
	var z=a[0]*b[0],n=a[1]*b[1];a[0]=z;a[1]=n;krz(a);
}
function divb(a,b)
{
	var z=a[0]*b[1],n=a[1]*b[0];a[0]=z;a[1]=n;
	krz(a);
}

function setb(a,b)
{
	a[0]=b[0];a[1]=b[1];
}
function setv(a,b)
{
	for(var i=0;i<b.length;i++){a[i]=new Array(0,1);setb(a[i],b[i]);}
}

function ggt(a,b)
{
	if(a==0)return b;if(b==0)return a;
	if((a==0)||(b==0)||(isNaN(a))||(isNaN(b)))return 1;
	if((Math.abs(a)>1e+15)||(Math.abs(b)>1e+15))return 1;
	a=Math.abs(a);b=Math.abs(b);
	var r;do{r=a%b;a=b;b=r;}while(r!=0);return a;
}
function kgv(a,b)
{
	return a*b/ggt(a,b);
}
function krz(x)
{
	var g=ggt(x[0],x[1]);x[0]/=g;x[1]/=g;var bb=new Array(2);setb(bb,x);
	if(x[1]<0){x[0]=-x[0];x[1]=-x[1];}
	if(x[0]==0)x[1]=1;
}
function parseb(t)
{
	var b=new Array();
	b=String(t).replace(/,/,".").split("/");if(b.length==1)b[1]=1;
	if(b[0].indexOf(".")>-1)b=kettenbruchapprox(Number(b[0])/Number(b[1]));
	if(b[1]<0){b[0]*=-1;b[1]*=-1;}
	return b;
}
function bstr(a,kl)
{
	if(a[0]==0)return "0";
	var k1=((kl!=null)&&(a[0]/a[1]<0))?"(":"";
	var k2=(k1=="")?"":")";
	if((kl==2)&&(a[1]!=1)){k1="(";k2=")";}
	if((a[1]==1)||((a[0]%1)!=0))return k1+String(a[0]/a[1]).replace(/\./,",")+k2;
	if(a[1]<0){a[0]*=-1;a[1]*=-1;}
	if((Math.abs(a[0])>1e+15)||(a[1]>1e+15))return k1+String(a[0]/a[1]).replace(/\./,",")+k2;
	if((!gem_br)||(Math.abs(a[0])<=a[1]))return k1+a[0]+"/"+a[1]+k2;
	return k1+((a[0]<0)?"-":"")+Math.floor(Math.abs(a[0])/a[1])+"_"+(Math.abs(a[0])%a[1])+"/"+a[1]+k2;
}
function bstrd(a,kl)
{
	if(a[0]==0)return "0";
	var k1=((kl!=null)&&(a[0]/a[1]<0))?"(":"";
	var k2=(k1=="")?"":")";
	return k1+String(a[0]/a[1]).replace(/\./,",")+k2;
}
function vstr(v)
{
	var t=new Array(v.length),i;
	for(i=0;i<v.length;i++)t[i]=bstr(v[i]);
	return "[ "+t.join(", ")+" ]";
}

function geradeganzzahlig(ov,rv)
{
	machganzzahlig(rv);
	var x=new Array(0,1),y=new Array(0,1),z=new Array(0,1),p=new Array(0,1),i,a,b,c,d,e,f,g,n,C,A=new Array(2);
	if(rv[2][0]!=0)
	{
		setb(p,ov[2]);divb(p,rv[2]);p[0]=-p[0];setb(x,rv[0]);multb(x,p);addb(x,ov[0]);setb(y,rv[1]);multb(y,p);addb(y,ov[1]);
		var T=Teiler(g=rv[2][0]);a=x[0];b=x[1];c=y[0];d=y[1];e=rv[0][0];f=rv[1][0];alert(a+"/"+b+"\n"+c+"/"+d);
		for(i=0;i<T.length;i++)
		{
			n=T[i];
			A[0]=b*d*f-b*d*e;A[1]=b*d*n;C=a*d-b*c;//A[0]:z A[1]: x-y
			alert(A+","+C);
			var dioph1=solvedioph(A,C);if(dioph1==null)continue;
			A[0]=-b*d*f-b*d*e;A[1]=b*d*n;C=a*d+b*c;//A[0]:z A[1]: x+y
			alert(A+","+C);
			var dioph2=solvedioph(A,C);if(dioph2==null)continue;
			var kl1=kleineLoesung(dioph1,1000);
			var kl2=kleineLoesung(dioph2,1000);
			//[x = (kl1 + kl2)/2  y = (kl2 - kl1)/2]
			alert(n+"\n"+dioph1+"\n"+dioph2+"\n"+kl1+"\n"+kl2+"\n\nx="+((kl1[1]+kl2[1])/2)+"\ny="+((kl1[1]-kl2[1])/2)+"\np="+z+"/"+n);
		}
	}
}

var pz=new Array(2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997, 1009, 1013, 1019, 1021, 1031, 1033, 1039, 1049, 1051, 1061, 1063, 1069, 1087, 1091, 1093, 1097, 1103, 1109, 1117, 1123, 1129, 1151, 1153, 1163, 1171, 1181, 1187, 1193, 1201, 1213, 1217, 1223, 1229, 1231, 1237, 1249, 1259, 1277, 1279, 1283, 1289, 1291, 1297, 1301, 1303, 1307, 1319, 1321, 1327, 1361, 1367, 1373, 1381, 1399, 1409, 1423, 1427, 1429, 1433, 1439, 1447, 1451, 1453, 1459, 1471, 1481, 1483, 1487, 1489, 1493, 1499, 1511, 1523, 1531, 1543, 1549, 1553, 1559, 1567, 1571, 1579, 1583, 1597, 1601, 1607, 1609, 1613, 1619, 1621, 1627, 1637, 1657, 1663, 1667, 1669, 1693, 1697, 1699, 1709, 1721, 1723, 1733, 1741, 1747, 1753, 1759, 1777, 1783, 1787, 1789, 1801, 1811, 1823, 1831, 1847, 1861, 1867, 1871, 1873, 1877, 1879, 1889, 1901, 1907, 1913, 1931, 1933, 1949, 1951, 1973, 1979, 1987, 1993, 1997, 1999, 2003, 2011, 2017, 2027, 2029, 2039, 2053, 2063, 2069, 2081, 2083, 2087, 2089, 2099, 2111, 2113, 2129, 2131, 2137, 2141, 2143, 2153, 2161, 2179, 2203, 2207, 2213, 2221, 2237, 2239, 2243, 2251, 2267, 2269, 2273, 2281, 2287, 2293, 2297, 2309, 2311, 2333, 2339, 2341, 2347, 2351, 2357, 2371, 2377, 2381, 2383, 2389, 2393, 2399, 2411, 2417, 2423, 2437, 2441, 2447, 2459, 2467, 2473, 2477, 2503, 2521, 2531, 2539, 2543, 2549, 2551, 2557, 2579, 2591, 2593, 2609, 2617, 2621, 2633, 2647, 2657, 2659, 2663, 2671, 2677, 2683, 2687, 2689, 2693, 2699, 2707, 2711, 2713, 2719, 2729, 2731, 2741, 2749, 2753, 2767, 2777, 2789, 2791, 2797, 2801, 2803, 2819, 2833, 2837, 2843, 2851, 2857, 2861, 2879, 2887, 2897, 2903, 2909, 2917, 2927, 2939, 2953, 2957, 2963, 2969, 2971, 2999, 3001, 3011, 3019, 3023, 3037, 3041, 3049, 3061, 3067, 3079, 3083, 3089, 3109, 3119, 3121, 3137, 3163);

function pfz(n)
{
	if(n>10000000){alert(n+" ist zu groß");return;}
	var i,t="";
	for(i=0;i<pz.length;i++){while(n%pz[i]==0){n/=pz[i];t+=pz[i]+"·";}if(n==1)break;}
	if(n>3162)t+=n+" ";
	return t.substr(0,t.length-1);
}
function Teiler(N)
{
	var f=pfz(N).split("·");
	var prf=new Array(),prfn=new Array(),i,j;
	prf[0]=f[0];prfn[0]=1;j=0;
	for(i=1;i<f.length;i++){if(prf[j]==f[i]){prfn[j]++;continue;}prf[++j]=f[i];prfn[j]=1;}
	var n=prfn[0]+1;for(i=1;i<prf.length;i++)n*=(prfn[i]+1);
	T=new Array(n);
	for(i=0;i<n;i++)T[i]=1;
	var k=prfn[0]+1;
	var p=prf[0];
	var pp=1;
	for(i=0;i<prfn[0];i++){pp*=p;T[i+1]=pp;}
	for(i=1;i<prf.length;i++) //Schleife über alle Primfaktoren
	{
		p=prf[i];pp=p;
		for(j=0;j<prfn[i];j++) //Schleife über alle Potenzen des Primfaktors
		{
			var d=j*k+k;
			for(a=0;a<k;a++){T[a+d]=T[a]*pp;}
			pp*=p;
		}
		k*=(prfn[i]+1);
	}
	return T;
}
