- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
public static boolean isPow(BigInteger n){
boolean zusammengesetzt=false;
BigInteger obereSchranke=n;
BigInteger untereSchranke=BigInteger.ONE;
BigInteger t;
for(BigInteger i=BigInteger.ONE;(i.compareTo(new BigInteger(new Integer((n.bitLength())).toString())) < 0);i=i.add(BigInteger.ONE)){
while( (obereSchranke.subtract(untereSchranke)).compareTo(BigInteger.ONE) > 0){
t=((obereSchranke.add(untereSchranke)).divide(new BigInteger("2")));
if((pow(t,i.add(BigInteger.ONE))).compareTo(n) == 0){
UserInterface.ausgabeFeld.append("Abbruch Schritt 1: Eingegebene Zahl ist nicht prim, da ");
UserInterface.ausgabeFeld.append("n = "+t+"^"+i.add(BigInteger.ONE)+"\n"+"\n");
UserInterface.ausgabeFeld.repaint();
return zusammengesetzt=true;
}
if((pow(t,i.add(BigInteger.ONE))).compareTo(n) > 0)
obereSchranke=t;
if((pow(t,i.add(BigInteger.ONE))).compareTo(n) < 0)
untereSchranke=t;
}
}
UserInterface.ausgabeFeld.append("Schritt 1: "+n+" ist keine echte Potenz!"+"\n");
UserInterface.ausgabeFeld.repaint();
return zusammengesetzt;
}
Проверка условия вида "n = a^b".
Впечатляет условие цикла for и реализация арифметических операций (хотя, может, с BigInteger так и надо).