Kleinste Zahl, die teilbar durch alle zahlen von 1 bis 20?
Ich habe dieses problem [Projekt Euler-problem 5], aber sehr schlechte Art der Programmierung, finden Sie den code in c++,
#include<iostream>
using namespace std;
//to find lowest divisble number till 20
int main()
{
int num = 20, flag = 0;
while(flag == 0)
{
if ((num%2) == 0 && (num%3) == 0 && (num%4) == 0 && (num%5) == 0 && (num%6) == 0
&& (num%7) == 0 && (num%8) == 0 && (num%9) == 0 && (num%10) == 0 && (num%11) == 0 && (num%12) ==0
&& (num%13) == 0 && (num%14) == 0 && (num%15) == 0 && (num%16) == 0 && (num%17) == 0 && (num%18)==0
&& (num%19) == 0 && (num%20) == 0)
{
flag = 1;
cout<< " lowest divisible number upto 20 is "<< num<<endl;
}
num++;
}
}
war ich die Lösung in c++ und stecken in einer Schleife, wie könnte man dies lösen, Schritt......
- betrachten num = 20 und dividieren von zahlen von 1 bis 20
- prüfen Sie, ob alle Reste null sind,
- wenn ja, beenden " und " show output num
- oder sonst num++
ich din nicht wissen, wie Kontrollstrukturen, so hat dieser Schritt
if ((num%2) == 0 && (num%3) == 0 && (num%4) == 0 && (num%5) == 0 && (num%6) == 0
&& (num%7) == 0 && (num%8) == 0 && (num%9) == 0 && (num%10) == 0 && (num%11) == 0 && (num%12) ==0
&& (num%13) == 0 && (num%14) == 0 && (num%15) == 0 && (num%16) == 0 && (num%17) == 0 && (num%18)==0
&& (num%19) == 0 && (num%20) == 0) `
wie dieser code in der richtigen Art und Weise?
Antwort für dieses problem ist:
abhilash@abhilash:~$ ./a.out
lowest divisible number upto 20 is 232792560
- Ich denke, die Suche im internet nach c++ tutorials (einschließlich Kontrollstrukturen) wäre eine gute Idee.
- ich weiß, über die Steuerung, aber nicht einen Weg finden, um dieses Problem zu lösen......thats, warum ich hier gefragt.
- ich habe eine Menge von Tipps nun, ich wollte einfach nur einen Ersatz für mein if-Schleife.......
- Jeder wird in Lösungen von der Zahl der Theorie, könnte jemand wenigstens zeigen, wie umschreiben Sie die multiline -
if
Bedingung aus der Frage in einemfor
- Schleife? - Es ist schon amüsant, dass du 3 sehr unterschiedliche Antworten jeder Einführung in ein anderes keyword und alle basierten auf dem gleichen Konzept!
- dies ist eine euler-Projekt problem.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist ein schneller Weg, um Antwort auf die problem, mit der Zahl der Theorie. Andere Antworten enthalten Hinweise, wie dies zu tun. Diese Antwort ist nur über eine bessere Art und Weise zu schreiben, die
if
Zustand in Ihrem ursprünglichen code.Wenn Sie nur wollen, ersetzen Sie die lange Bedingung, Sie können es Ausdrücken, mehr schön in einer for-Schleife:
wird:
Stil ist nicht toll, aber ich denke, das ist, was Sie gesucht haben.
break
verlassen der Schleife aufdivisor
wenn eine der zahlen in der 2..20 nicht teilennum
. Dieif (divisor!=21)
ist zu prüfen, ob die Schleife wurde beendet mit einer solchenbreak;
oder normal (da alle zahlen von 2..20 geteiltnum
).int divisor; for (divisor=2; divisor<=20; divisor++)
; wenn Sie die Erklärung derdivisor
im inneren desfor
Aussage, es wird nicht in Reichweite, wenn Sie es testen, wenn die Schleife beendet wird.Die kleinste Zahl, die teilbar ist durch zwei zahlen ist die LCM dieser beiden zahlen. Eigentlich ist die kleinste Zahl teilbar durch eine Menge von N zahlen x1..xN ist die LCM von diesen zahlen. Es ist leicht zu berechnen ist die LCM von zwei zahlen (siehe wikipedia-Artikel), und Sie erweitern können, um N zahlen, die durch ausnutzen der Tatsache, dass
Hinweis: Hüten Sie sich vor der überläuft.
Code (in Python):
Faktor, der die zahlen von 1 bis 20 in Ihrer prime factorizations. Zum Beispiel, Faktor-18 von 18 = 3^2 * 2. Nun, für jede Primzahl
p
erscheint, die Primzahl-ZERLEGUNG von einigen Ganzzahl im Bereich von 1 bis 20, finden Sie den maximalen Exponenten, dass es unter all den prime factorizations. Zum Beispiel der prime3
haben Exponenten2
da erscheint es in der Faktorisierung von 18 3^2, und wenn es schien, in jeder Primzahl-ZERLEGUNG mit einem Exponenten von 3 (D. H., 3^3),, die Zahl müsste mindestens so groß ist wie 3^3 = 27, die es außerhalb des Bereich von 1 bis 20. Jetzt sammeln Sie alle diese Primzahlen mit Ihren entsprechenden exponent und haben Sie die Antwort.So, als Beispiel, finden wir die kleinste Zahl teilbar durch alle zahlen von 1 bis 4.
Die Primzahlen, die angezeigt werden
2
und3
. Wir beachten, dass der maximale exponent von2
ist2
und der maximale exponent von3
ist1
. Also die kleinste Zahl, die teilbar durch alle zahlen von 1 bis 4 ist 2^2 * 3 = 12.Hier ist eine relativ einfache Umsetzung.
Beispiel-Ausgabe:
Sehen http://en.wikipedia.org/wiki/Greatest_common_divisor
Gegeben seien zwei zahlen a und b kann man berechnen gcd(a, b) und die kleinste Zahl teilbar durch beide ist es a * b /ggT(a, b). Die offensichtliche Sache zu tun ist zu halten eine Art running total of diese und fügen Sie in die zahlen, die Sie kümmern, eins nach dem anderen: haben Sie eine Antwort so weit Ein, und fügen Sie in der nächsten Nummer X_i zu betrachten, indem Sie
A' = A * X_i /(gcd(A, X_i))
Können Sie sehen, dass dies tatsächlich funktioniert, indem Sie überlegen, was Sie bekommen, wenn Sie factorise alles und schreiben Sie Sie heraus, als Produkte von Primzahlen. Dies sollte ziemlich viel arbeiten Sie heraus, die Antwort von hand.
Hinweis:
statt Inkrementierung num um 1 bei jedem Schritt, den Sie könnte es Inkrement von 20 (wird die Arbeit viel schneller). Natürlich kann es andere Verbesserungen, die auch krank denken Sie darüber später, wenn ich Zeit habe. Hoffe, ich half Ihnen ein wenig.
Die Zahl in Frage, die das kleinste gemeinsame Vielfache der zahlen von 1 bis 20.
Weil ich faul bin, lass ** Potenzierung darstellen. Lassen kapow(x,y) stellen den ganzzahligen Teil des log zur Basis x von y. (Zum Beispiel, kapow(2,8) = 3, kapow(2,9) = 3, kapow(3,9) = 2.
Der Primzahlen kleiner oder gleich 20 sind 2, 3, 5, 7, 11, 13, und 17. Die LCM ist,
Weil sqrt(20) < 5, wir wissen, dass kapow(i,20) for i >= 5 ist 1. Durch die Inspektion, das LCM ist
ist
oder
Dieser Vektor wird verwendet für die Speicherung der Faktoren, die die kleinste Zahl.
Dies kann Ihnen helfen
http://www.mathwarehouse.com/arithmetic/numbers/prime-number/prime-factorization.php?number=232792560
Die Primzahl-ZERLEGUNG von 232,792,560
2^4 • 3^2 • 5 • 7 • 11 • 13 • 17 • 19
Ruby Cheat:
dies ist in c geschrieben
}
Hier ist ein C# - version von @MAK die Antwort, es könnte sein, die Liste zu reduzieren-Methode in C#, ich habe etwas gefunden online, aber keine schnelle Beispiele, so dass ich nur verwendet eine for-Schleife anstelle von Python
reduce
:Da die maximale
n
, die Sie zurückgeben wollen, die kleinste Zahl, die teilbar ist durch 1 bis 20.Schauen wir uns den Satz von 1 bis 20. First off, es enthält eine Reihe von Primzahlen, nämlich:
So, weil es muss durch 19 teilbar sein, können Sie nur aktivieren, wird ein Vielfaches von 19, da 19 eine Primzahl ist. Nach, dass Sie überprüfen, ob es geteilt werden kann, die von unten, die etc. Wenn die Zahl, die geteilt werden kann durch alle Primzahlen erfolgreich, es kann aufgeteilt werden, indem die zahlen von 1 bis 20.