/*
 * EulerscheFunktion.java
 *
 * Created on 9. Januar 2003, 20:45
 */

package Mathematik;

/**
 *
 * @author  Ib02gaup
 */
public class EulerscheFunktion
{
    
    /** Creates a new instance of EulerscheFunktion */
    public EulerscheFunktion()
    {
    }
    
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args)
    {
        long in;
        long teiler=2, old_teiler=0;
        long exponent=1;
        long eul=1;
        
        System.out.print("Geben Sie Ihre Zahl ein: ");
        in = (long)InOut.getFloat();
        
        System.out.print("Primzahlzerlegung: ");
        while(in > 1)
        {
            if(0 == in%teiler)
            {
                in = in/teiler;
     
                if(old_teiler == teiler)
                {
                    exponent++;
                }
                else
                {
                    if(exponent == 1)
                    {
                        eul = eul * (teiler - 1);
                    }
                    else
                    {
                        eul = eul * (Potenz(old_teiler, exponent) - Potenz(old_teiler, (exponent - 1)));
                        exponent=1;
                        eul = eul * (teiler - 1);
                    }                    
                }
                old_teiler = teiler;
                
                System.out.print(teiler);
                System.out.print("  ");
            }
            else
                teiler++;
        }
        
        if(exponent != 1)
        {
            eul = (Potenz(old_teiler, exponent) - Potenz(old_teiler, (exponent - 1)));
        }
                
        System.out.println(" ");
        System.out.print("Zahl der Euler'schen Funktion: " + eul);
    }
    
    public static long Potenz(long Zahl, long Exponent)
    {
        long Resultat=Zahl;
        if(Exponent != 0)
        {
            Exponent--;
            while(Exponent != 0)
            {
                Exponent--;
                Resultat=Resultat*Zahl;
            }
        }
        else
            Resultat=1;
        return Resultat;
    }
}
