Hallo.
Vorweg eins: Ich bin relativ unerfahren, was Java angeht.
Aber nun zur Aufgabe:
Es geht um eine kleine mathematische Spielerei. Hierbei soll eine Zahl gefunden, welche mit verschiedenen Faktoren multipliziert eine Permutation der Zahlen gibt.
Also zum Beispiel:
Zahl: 142857 ( 285714;428571;571428 )
Hier wurde mit den Faktoren 1,2,3,4 gerechnet.
Nun habe ich ein Programm, dass mir neben diesem einen richtigen Ergebnis im Bereich 100.000 bis 150.000 leider etliche falsche Zahlen auflistet.
Hier das Programm:
Und hier die Ausgabe, die mir eclipse liefert:
Zahl: 100305 ( 200610;300915;401220 ) - Zeit: 7ms
Zahl: 100503 ( 201006;301509;402012 ) - Zeit: 12ms
Zahl: 100547 ( 201094;301641;402188 ) - Zeit: 13ms
Zahl: 100728 ( 201456;302184;402912 ) - Zeit: 16ms
Zahl: 100729 ( 201458;302187;402916 ) - Zeit: 16ms
Zahl: 102507 ( 205014;307521;410028 ) - Zeit: 24ms
Zahl: 102607 ( 205214;307821;410428 ) - Zeit: 24ms
Zahl: 102707 ( 205414;308121;410828 ) - Zeit: 25ms
Zahl: 102708 ( 205416;308124;410832 ) - Zeit: 25ms
Zahl: 106534 ( 213068;319602;426136 ) - Zeit: 29ms
Zahl: 109728 ( 219456;329184;438912 ) - Zeit: 32ms
Zahl: 129857 ( 259714;389571;519428 ) - Zeit: 50ms
Zahl: 142857 ( 285714;428571;571428 ) - Zeit: 61ms
Joa, ich hab ne Vermutung, dass das Entfernen der Elemente nicht richtig funktioniert.
Vielleicht erbarmt sich ja ein findiger Programmierer meiner Dummheit
Gruß
Vorweg eins: Ich bin relativ unerfahren, was Java angeht.
Aber nun zur Aufgabe:
Es geht um eine kleine mathematische Spielerei. Hierbei soll eine Zahl gefunden, welche mit verschiedenen Faktoren multipliziert eine Permutation der Zahlen gibt.
Also zum Beispiel:
Zahl: 142857 ( 285714;428571;571428 )
Hier wurde mit den Faktoren 1,2,3,4 gerechnet.
Nun habe ich ein Programm, dass mir neben diesem einen richtigen Ergebnis im Bereich 100.000 bis 150.000 leider etliche falsche Zahlen auflistet.
Hier das Programm:
Java:
package kleinstePerm;
import java.util.*;
public class KleinstePermutation {
public static void main(String[] args)
{
int faktoren = 4; // Faktoren. Beispiel: 4 = 1,2,3,4 ; 6 = 1,2,3,4,5,6 ...
long zeitVorher=System.currentTimeMillis(); // Zeitmessung
int zahl = 100000;
while(zahl < 150000)
{
boolean isPermutation = true;
for(int i=1; i<=faktoren; i++)
{
if(!checkPermutation(zahl, zahl*i))
{
isPermutation = false;
break;
}
}
if(isPermutation)
{
System.out.println("Zahl: " + zahl + " ( "+zahl*2+";"+zahl*3+";"+zahl*4+" ) - Zeit: " + (System.currentTimeMillis() - zeitVorher) + "ms");
}
zahl++;
}
}
public static boolean checkPermutation(int x1, int x2)
{
boolean flag = true;
List<Integer> zahlen1 = new ArrayList<Integer>();
List<Integer> zahlen2 = new ArrayList<Integer>();
while (x1>0) {
zahlen1.add(0, new Integer(x1%10));
x1=x1/10;
}
while (x2>0) {
zahlen2.add(0, new Integer(x2%10));
x2=x2/10;
}
if(zahlen1.size() != zahlen2.size()) { return false; }
for (int i=0; i<zahlen1.size(); i++)
{
boolean found = false;
Integer temp = zahlen1.get(i);
if(zahlen2.contains(temp))
{
found = true;
zahlen2.remove(temp);
zahlen1.remove(temp);
}
if(!found)
{
flag = false;
break;
}
}
return flag;
}
}
Und hier die Ausgabe, die mir eclipse liefert:
Zahl: 100305 ( 200610;300915;401220 ) - Zeit: 7ms
Zahl: 100503 ( 201006;301509;402012 ) - Zeit: 12ms
Zahl: 100547 ( 201094;301641;402188 ) - Zeit: 13ms
Zahl: 100728 ( 201456;302184;402912 ) - Zeit: 16ms
Zahl: 100729 ( 201458;302187;402916 ) - Zeit: 16ms
Zahl: 102507 ( 205014;307521;410028 ) - Zeit: 24ms
Zahl: 102607 ( 205214;307821;410428 ) - Zeit: 24ms
Zahl: 102707 ( 205414;308121;410828 ) - Zeit: 25ms
Zahl: 102708 ( 205416;308124;410832 ) - Zeit: 25ms
Zahl: 106534 ( 213068;319602;426136 ) - Zeit: 29ms
Zahl: 109728 ( 219456;329184;438912 ) - Zeit: 32ms
Zahl: 129857 ( 259714;389571;519428 ) - Zeit: 50ms
Zahl: 142857 ( 285714;428571;571428 ) - Zeit: 61ms
Joa, ich hab ne Vermutung, dass das Entfernen der Elemente nicht richtig funktioniert.
Vielleicht erbarmt sich ja ein findiger Programmierer meiner Dummheit
Gruß