#include <stdio.h>
#define MAXLAENGE 70



void Initialisiere(unsigned long PFPF[MAXLAENGE])
{
	short i=0; 
	for(i=0;i<MAXLAENGE;i++)
	{
		PFPF[i]=1;
	}
	return;  
}

/*------------------------------------*/
  
void Ausgabe(unsigned long PFPF[MAXLAENGE])
{
	short i=0; 
	for(i=0;(i<(MAXLAENGE-1) && PFPF[(i+1)]!=1 );i++)
	{
		printf("%lu,\n",PFPF[i]);
	}
	printf("%lu.\n",PFPF[i]);
	return;  
}

/*------------------------------------*/
  
unsigned long MinPrimFak(unsigned long N)  
{
	unsigned long M=1;
    
	do 
	{
		M++;
		if((N%M)==0)
		{
			return(M);
		}
	}while(M*M<=N);
    
	return(N);
}
  
/*------------------------------------*/ 


int main(void)
{
	unsigned long n=2, nschritt=2, primfak=1;
	unsigned long PF[MAXLAENGE];
	short i=0;
  
	Initialisiere(PF);
    
	printf("Wir berechnen die Primfaktorzerlegung einer natuerlichen Zahl\
echt groesser als 1 mit maximal 18 Stellen.\n\
Bitte geben Sie eine solche Zahl ein: ");
	scanf("%lu",&n);
	
	while(n<2)
	{
		printf("Noch einmal ordentlich: ");
		scanf("%lu",&n); 
	}
		
	nschritt=n;		
			    
	do
	{
		nschritt=nschritt/primfak;
		primfak=MinPrimFak(nschritt);
		PF[i]=primfak;
		i++;
     
	} while(primfak<nschritt);
   
    
	if(n==PF[0])   
	{
		printf("Die Zahl %lu ist prim.\n",n);
	}
	else
	{
		printf("Die Primfaktorzerlegung von %lu lautet:\n",n);
		Ausgabe(PF);
	}
 
	return(0);
}

 
 
 
 
 
 
