/* Aufgabenblatt 1-Programmieraufgaben*/

import java.lang.Math.*;

public class Blatt1{
 
 	/*teilt n durch m mit Rest und gibt ein Array wieder mit erstem
 	 Eintrag r und zweitem Eintrag s, falls n=s*m+r*/
 	public static long[] divmitrest(long n, long m){
 		long[] ausgabe=new long[2];
 		ausgabe[0]=n;
 		/*Fängt ab, falls durch Null geteilt wird und gibt 
 		dann das Array {-1,-1} wieder*/
 		if(m==0){
 			System.out.println("Teilen durch Null");
 			ausgabe[0]=-1;	
 			ausgabe[1]=-1;
 			return ausgabe;
 		}
 		
 		else if(ausgabe[0]>=m){
 			while(m<=ausgabe[0]){
 				long i=1;
 				while(m*i*10<ausgabe[0])i=i*10;
 				ausgabe[0]=ausgabe[0]-m*i;
 				ausgabe[1]=ausgabe[1]+i;
 						
 		}
 		return ausgabe;
 		}
 		else return ausgabe;
 		
 	} 
 		
 	//gibt die p-adische der Zahl n als Array wieder	
 	public static long[] padic(long p, long n){
 		int laenge=0;
 		while((double)n/Math.pow(p,laenge)>=1) laenge++;
 		long[] ausgabe=new long[laenge];
 		int i=0;
 		while(n>0){
 			ausgabe[i]=divmitrest(n,p)[0];
 			n=divmitrest(n,p)[1];
 			i++;
 		}
 			return ausgabe;
 		
 	}
 	
 	//testet, ob eine Zahl eine Primzahl ist
 	public static boolean primzahltest(long n){
 		boolean ausgabe=true;
 		long i=2;
 		if(n==2)return true;
 		else if(divmitrest(n,i)[0]==0) return false;
 		else{
 			i++;
	 		while(ausgabe==true&&i<=(int)Math.sqrt(n)){
	 			if(divmitrest(n,i)[0]==0)ausgabe=false;
	 			i=i+2;
	 		}
	 		return ausgabe;
 		}
 		
 	}
 
   //Hilfsmethode, die ein Array ausgibt
   public static void ausgabe(long[] s){
		if(s==null){
		}
		else{
		for(int i=s.length-1;i>=0;i--){
			System.out.print(" "+s[i]+" ");
		}
		System.out.println();
	}
	}
	
	//berechnet die kleinste Primzahl oberhalb einer gegebenen Zahl
	public static long kleinstePZ(long n){
		boolean tmp=false;
		while(tmp==false){
			if(primzahltest(n)==true)tmp=true;
			n++;
		}
		return n-1;
		
	}
	
    
	public static void main(String[] args){
			System.out.println("Aufgabe 2");
			System.out.println();
			
			for(long i=1000L;i<=1000000000000L;i=i*1000){
				System.out.println("Die kleinste Primzahl oberhalb "+i+" ist "+kleinstePZ(i));
				
			}
			System.out.println();
			System.out.println("----------------------");
			
			System.out.println("Aufgabe 3");
			System.out.println();
			int g=2;
			int h=5;
			int k=7;
			int l=60;
			for(long i=1000L;i<=1000000000000L;i=i*1000){
				System.out.println("Die "+g+"-adische Zifferndarstellung der Zahl "+i+" ist" );
				ausgabe(padic(g,i));
				
			}
			System.out.println();
			for(long i=1000L;i<=1000000000000L;i=i*1000){
				System.out.println("Die "+h+"-adische Zifferndarstellung der Zahl "+i+" ist" );
				ausgabe(padic(h,i));
				
			}
			System.out.println();
			for(long i=1000L;i<=1000000000000L;i=i*1000){
				System.out.println("Die "+k+"-adische Zifferndarstellung der Zahl "+i+" ist" );
				ausgabe(padic(k,i));
				
			}
			System.out.println();
			for(long i=1000L;i<=1000000000000L;i=i*1000){
				System.out.println("Die "+l+"-adische Zifferndarstellung der Zahl "+i+" ist");
				ausgabe(padic(l,i));
				
			}
			System.out.println();
			System.out.println("----------------------");
			
		}
		
	}
		
	

		









