[link] Project Euler - Programmieraufgaben

Ich habe ein Prob mit der Aufgabe 97.

Ich muss 28433 * 2 ^7830457 + 1
So .. der PC rechnet seit 12min und ich habe immer noch kein Ergebnis..
Mit der "One-Minute-Rule" siehts schlecht für mich aus.

Code:
import java.math.*;
class ex97 {
  public static void main (String [] args) {
    //variable declaration und initialisation
    long time=System.currentTimeMillis();
    String str = "";
    BigInteger a = BigInteger.valueOf(0);
    BigInteger two = BigInteger.valueOf(2);
    BigInteger value = BigInteger.valueOf(28433);
    long counter = 0;
    // 2 hoch 7830457 rechnen
    a = two.pow(7830457);
    // a mal 28433
    a = a.multiply(value);
    str = a.toString();
    //ausgabe der Stringlänge , sollte 2.357.207 sein ôo
    System.out.println(str.length());
    //ausgabe des Strings
    System.out.println(str);
    System.out.println("benötigte Zeit: "+(System.currentTimeMillis()-time)/1000+ " Sekunden" );
    
  }
}

Naja, ich weiss nicht wie ich es verbessern soll.
und ich weiss auch nicht ob ich ein Ergebnis bekommen würde wenn ich 30min warten würde.
 
Mit der Bruteforce Methode geht das hier nicht.
Denk mal über den Modulus nach, damit klappts unter 1 Sekunde.

Tip:
BigInteger mod = new BigInteger("10000000000");
 
hmm, ich habe es mit einer anderen Methode gemacht.
ich habe einfach jedes mal nur die letzten 10 Digits behalten von dem ganzen String.
es hat so geklappt.
 
Problem 17 - englische Zahlwörter

Aufgabe ist, die Zahlen von 1 bis 1000 englisch auszuschreiben und deren Buchstaben zu zählen.

Also, ich habe die Zahlen nach http://de.wikibooks.org/wiki/Englisch:_Zahlen ausgeschrieben, getestet (von 1 bis 1000, auch extra mit den Beispielen aus der Aufgabenstellung) und zusammengezählt.

Dabei komme ich auf 21224 Buchstaben.

Das EulerProject beharrt aber darauf, daß das falsch sei.
Hat jemand einen Hinweis?

Am schönsten wäre es, wenn jemand, der die Aufgabe gelöst hat, ein paar (andere) Zahlenfolgen mit dazugehörigen "Meßwerten" reinstellen könnte, ohne gleich die Aufgabe zu lösen... (auf daß man erkennen könne, wo der Unterschied zum englischen Aussprechen liege...)

Ich habe den Eindruck, daß diese Aufgabe eher was für Englisch-Lehrer ist als für Mathe- oder Computer-Freaks.
 
Nach unzähligen Stunden des Analysierens, Codens, Testens, frustriert auf das rote Kreuz Schauens, wieder von vorne Anfangens hab ich aufgegeben... Dabei ist es eigentlich eine einfache Aufgabe die man sogar mit Papier und Bleistift bewältigen können sollte.

// Edit : Ich werde nicht aufgeben, in den Ferien werd ich das Problem nochmal angehen ^^
 
Ich hab momentan probleme mit aufgabe 2 *rolleyes*
bin zu blöd das englisch zu verstehen
Each new term in the Fibonacci sequence is generated by adding the previous two terms. By starting with 1 and 2, the first 10 terms will be:

1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...

Find the sum of all the even-valued terms in the sequence which do not exceed one million.

Das heißt doch das ich die Fibonacci Folge darstellen soll mit den ersten zwei zahlen 1 und 2 (wie halt oben in der folge angegeben) und dann die Summe aus allen Zahlen bilden soll bis die Fibonacci zahlen 1 Millionen überschreiten, oder?

Wenn nein bitte sagen was ich falsch übersetze.

Greetz
Chris
 
@Harry Boeck:
Ich geb dir mal ein paar Ergebnisse von meinem Programm für Problem 17 (jeweils einschließlich Anfang+Ende):
1 - 100: 864 Buchstaben
100-200: 2161 Buchstaben
800-900: 2362 Buchstaben

Ich habe an diesem Problem auch ewig gesessen, weil ich einfach die ganzen englischen Zahlen nicht auf die Reihe gekriegt habe. Hab's aber letztendlich doch geschafft.
Du könntest dein Programm mal posten, damit wir mal nach Fehlern suchen können. Ansonsten ist das nicht so einfach. ;)
 
Ich hab endlich Problem 17 geknackt. Danke für den Wikipedia-Link, jetzt weiss ich, dass man forty und nicht fourty schreibt und dass mein auf den Tag genau 11-Monate-alter Code richtig war...
 
Ich scheitere schon wieder :( diesmal an Problem 20

n! means n (n 1) ... 3 2 1

Find the sum of the digits in the number 100!

Mein Problem liegt heute nicht in der Übersetzung sonder das ich mit Pascal/Delphi nicht weiß wie ich derart große Zahlen speichern soll!?

Kann mir da evtl. jemand weiterhelfen?

Oder ich deute die übersetzung doch falsch!?`(bis zahl 8 wäre 1x2x3x4...x7x8 ) oder?

Greetz
Chris
 
das ist ja der Trick an der Sache, du darfst die Zahl nicht ausrechnen um an die Lösung zu kommen, sondern gut zerlegen
 
schon aber du musst theoretisch 100! ausrechenen und dann die Stellen aufeinander addieren nur hat 100! etwa 158 Stellen also muss man sich was schlaueres einfallen lassen^^
 
Original von Copykill
schon aber du musst theoretisch 100! ausrechenen und dann die Stellen aufeinander addieren nur hat 100! etwa 158 Stellen also muss man sich was schlaueres einfallen lassen^^

man kann auch einfach eine library zum Speichern vonn großen Zahlen verwenden, z.B. die GMP
 
oder du nimmst Blatt Papier Stift und dein Hirn, kriegst es sogar von Hand hin (dauert nur etwas länger), denn was machst du, wenn du zum Besipiel nicht 100! sondern 10000! nimmst (oder eine sehr tolle Aufgabe aus meinem Vorsemester, bestimmer mal die letzten 3 Stellen von 9^9^9), da wird das ganze irgendwann unwirtschaftlich...
 
Original von Copykill
oder du nimmst Blatt Papier Stift und dein Hirn, kriegst es sogar von Hand hin (dauert nur etwas länger), denn was machst du, wenn du zum Besipiel nicht 100! sondern 10000! nimmst

darf ich fragen, wie du es gelöst hast? da interessiert mich nämlich :)
 
1. Schritt alle 1 und 100 raus
2. Schritt alle durch 2, 5, 10 teilbaren raus (umgekehrte reihenfolge) Modifikatoren eingefügt
3. Schritt alle Zahlen größer 10 in Terme mod 10 zerlegt und dann klammern aufgelöst (achtung hier entstehen neue Modifikatoren, die wieder nach 2 aufgelöst werden müssen)
4. Schritt jetzt wird es häßlich: Es lässt sich zumindest bis auf die Nullen durch eine Kombination des Terms a*3*4*6*7*8*9+b*3*4*6*7*8*9 plus Vorfaktoren a,b schreiben. den ausrechnen und mit Vorfaktoren multiplizieren (weiß sie nich auswendig, den hat mein pc mir bestimmt)

Man bekommt eine recht große Zahl raus, deren Quersumme gleich der Quersumme von 100! ist. Ich weiß nur nicht in welchem zusammenhang die Zahlen zueinander stehen. Sie ist aber durch einen normalen Integer darstellbar.
 
Original von Copykill
1. Schritt alle 1 und 100 raus
2. Schritt alle durch 2, 5, 10 teilbaren raus (umgekehrte reihenfolge) Modifikatoren eingefügt
meinst du hier alle, die auf 1, 2, 5 enden oder durch 10 teilbar sind?
das würde nämlich später bei deinen termen sinn ergeben, in denen keine dieser Zahlen vorkommen.

alle Zahlen größer 10 in Terme mod 10 zerlegt und dann klammern aufgelöst
was meinst du hiermit? ich soll jede Zahl einzeln nehmen und mod 10 machen, also die einerstelle nehmen? dann habe ich viele terme, aber welche klammern muss ich dann auflösen?

Es lässt sich zumindest bis auf die Nullen durch eine Kombination des Terms a*3*4*6*7*8*9+b*3*4*6*7*8*9 plus Vorfaktoren a,b schreiben. den ausrechnen und mit Vorfaktoren multiplizieren (weiß sie nich auswendig, den hat mein pc mir bestimmt)
sorry, hier kann ich nicht ganz folgen; was meinst du mit "Es" ?


Ich weiß nur nicht in welchem zusammenhang die Zahlen zueinander stehen. Sie ist aber durch einen normalen Integer darstellbar.
wie bist du denn auf die Lösung gekommen? also was waren deine Gedankengänge?


Sorry für die vielen Missverständnisse,
Heinzelotto
 
Zurück
Oben