Hallo zusammen
Ich möchte ein eigenes PHP-Projekt, an dem ich ein wenig lange habe, starten.
Weiss jedoch nicht was ich machen könnte.
Es sollte für Übungszwecke dienen.
Kann mir jemand eine Aufgabe geben?
Hallo zusammen
Ich möchte ein eigenes PHP-Projekt, an dem ich ein wenig lange habe, starten.
Weiss jedoch nicht was ich machen könnte.
Es sollte für Übungszwecke dienen.
Kann mir jemand eine Aufgabe geben?
heißt also, dass sie wirklich nur 1 und durch sich selbst teilbar ist
also, 7 z.B. , ist durch 1 teilbar? ja(sind alle ganzen zahlen) und durch sich selbst teilbar ? (sind auch alle ganzen zahlen)
durch etwas anderes?
fangen wir an mit der 2, nein
3, nein
4, nein
5, nein
6, nein
7, oh das ist die zahl selber, also geht nur durch 1 und durch sich selbst
7 ist also eine primzahl
und wie du nur ganzzahlig teilen lässt(unabhängig ob float oder integer), hat dir ja schon spyx gesagt
e: bin jetzt mitlerweile bei 11, die 10001 primzahl habe ich nun durch "annäherung" gemacht, also erst die 1000. bestimmt und dann von da aus wieder der "startpunkt", somit fällt die rechenarbeit von 1-1000 weg
ich krieg es einfach nicht hin das hier als ein array hinzubekommen
steckt nun in einer txt datei, mit dem hier lese ich es ein:PHP-Code:
08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08
49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00
81 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 13 36 65
52 70 95 23 04 60 11 42 69 24 68 56 01 32 56 71 37 02 36 91
22 31 16 71 51 67 63 89 41 92 36 54 22 40 40 28 66 33 13 80
24 47 32 60 99 03 45 02 44 75 33 53 78 36 84 20 35 17 12 50
32 98 81 28 64 23 67 10 26 38 40 67 59 54 70 66 18 38 64 70
67 26 20 68 02 62 12 20 95 63 94 39 63 08 40 91 66 49 94 21
24 55 58 05 66 73 99 26 97 17 78 78 96 83 14 88 34 89 63 72
21 36 23 09 75 00 76 44 20 45 35 14 00 61 33 97 34 31 33 95
78 17 53 28 22 75 31 67 15 94 03 80 04 62 16 14 09 53 56 92
16 39 05 42 96 35 31 47 55 58 88 24 00 17 54 24 36 29 85 57
86 56 00 48 35 71 89 07 05 44 44 37 44 60 21 58 51 54 17 58
19 80 81 68 05 94 47 69 28 73 92 13 86 52 17 77 04 89 55 40
04 52 08 83 97 35 99 16 07 97 57 32 16 26 26 79 33 27 98 66
88 36 68 87 57 62 20 72 03 46 33 67 46 55 12 32 63 93 53 69
04 42 16 73 38 25 39 11 24 94 72 18 08 46 29 32 40 62 76 36
20 69 36 41 72 30 23 88 34 62 99 69 82 67 59 85 74 04 36 16
20 73 35 29 78 31 90 01 74 31 49 71 48 86 81 16 23 57 05 54
01 70 54 71 83 51 54 69 16 92 33 48 61 43 52 01 89 19 67 48
habs im netz gefunden, damals beim buchstabenquadrat, scheint aber hier nicht so ganz zu klappen, auch wirklich durchsteigen tu ich da nicht...PHP-Code:
$tmp = file('./Aufgabe11.txt');
$array = array();
foreach ($tmp as $row) {
$row = trim($row);
if ($row !== '') {
$array[] = str_split($row);
}
}
ich will nun bei $array[0][0] 08 haben
bei $array[1][0] dann 02 usw... und nicht nur einzelne zahlen
e: ist es eigentlich OK wenn ich es hier nachfrage??
ahZitat von Spyx
Dann habe ich alle Primzahlen in einem Array:PHP-Code:
$zahlen = array();
for($i=0, $i<103, $i++) {
if(is_int(103/$i)) {
array_push($zahlen, $i);
}
}
Ausgabe der Anzahl:
oder nicht?PHP-Code:
$anzahl = count($zahlen);
print $anzahl;
dennis13393 hat dir doch schon einen guten Tipp gegeben. Ich formuliere es einfach mal anders:
Eine Primzahl ist eine Zahl, die nur durch 1 und sich selbst teilbar ist. Jetzt nehmen wir einfach mal drei Zahlen (7, 13 & 15) und tun so, als währen wir so dumm wie ein Computer.
Jetzt schauen wir, ob 7 nur durch sich selbst teilbar ist oder auch durch kleiner Zahlen. Das Testen, ob eine Zahl durch 1 teilbar ist, können wir einfach mal weglassen, da das auf jede Zahl zutrifft .Hier sehen wir schön, dass die 7 nur durch 1 und sich selbst teilbar ist. Jeder andere Versuch ist gescheitert. Das bedeutet, dass 7 eine Primzahl ist.
- 7 / 2 = nicht möglich
- 7 / 3 = nicht möglich
- 7 / 4 = nicht möglich
- 7 / 5 = nicht möglich
- 7 / 6 = nicht möglich
- 7 / 7 = 1
Das Ganze machen wir jetzt noch einmal mit der 13:Auch hier sehen wir wieder schön - genau wie oben - das 13 eine Primzahl ist.
- 13 / 2 = nicht möglich
- 13 / 3 = nicht möglich
- 13 / 4 = nicht möglich
- 13 / 5 = nicht möglich
- 13 / 6 = nicht möglich
- 13 / 7 = nicht möglich
- 13 / 8 = nicht möglich
- 13 / 9 = nicht möglich
- 13 / 10 = nicht möglich
- 13 / 11 = nicht möglich
- 13 / 12 = nicht möglich
- 13 / 13 = 1
Und zuletzt das ganze noch einmal mit 15:Jetzt können wir schon abbrechen. Die 15 kann man durch drei teilen, somit ist sie keine Primzahl.
- 15 / 2 = nicht möglich
- 15 / 3 = 5
kommst du dort nun immernoch nicht weiter oder hat's sich schon erledigt?
also, eine primzahl darf nun durch nichts außer 1 und sich selbst geteilt werden, dann machst du eben eine schleife von 2 -- Zahl-1, und dann eben rauswerden wenn das einmal der fall war...
Hab's bis jetzt noch nicht geschafft. Habe momentan auch viel um die Ohren.
Melde mich wieder wenn ich es probiert habe
Danke an Spyx und dennis
Ich weiss schon was eine Primzahl ist, aber jetzt glaube ich auch zu wissen wie ich das abfragen kann :P
Langsam denke ich wirklich, dass ich zu DOOF bin für das.
Siehe bitte Code:
Was ist jetzt wieder falsch? Ist doch das richtige Prinzip oder?PHP-Code:
<?
$start = 2;
$ziel = 201;
for($i=$ziel; $i=>$start; $i--)
{
for($j=$start; $j<$i and $prim!=false; $j++)
{
if(is_int($i%$j)) {
$prim = false;
}
}
}
print $prim;
?>
es geht immernoch um das hier oder?
alsooo... man nehme erstmal als $zahl=13195; um das ganze zu überprüfen, die lösung hast du ja dortThe prime factors of 13195 are 5, 7, 13 and 29.
What is the largest prime factor of the number 600851475143 ?
also als erstes wird ja ein ganzzahliger teiler von der 13195 (später die lange zahl da) gesucht
also als erstes nach teiler gucken, größter wird gesucht, also von oben anfangen anstatt erst nach primzahlen zu suchen
wenn der teiler nun gefunden ist, muss nun nur noch geguckt werden obs eine primzahl ist, wenn ja kann man sie ja auch einfach nur per echo ausgeben und den rest abbrechen (z.B. die variable für die for schleife auf das endergebnis setzen->for wird abgebrochen)
dann hättest du doch das ganze
zu deinem scirpt grade, ich verstehe den ganzen durchgang nicht!
also erst ist i=ziel (also 201)
und j =start (also 2)
dann wird geguckt ob 201/2 ohne rest teilbar ist, wenn ja dann prim= falsch (wird nicht gemacht)
dann wird i um eins verringert, j um eins erhöht
also dann 200/3, auch hier wieder keine if bedingung erfüllt
aber was bringt nun das ganze? ...
geht immer noch nicht.PHP-Code:
<?
$start = 2;
$ziel = 201;
for($i=$ziel; $i=>$start; $i--)
{
for($j=$i; $j>2; $j--)
{
if(is_int($i%$j)) {
print $i;
$j = $i;
$i = $start-1;
}
}
}
?>
was ist falsch?
Also, aber ich habe die Aufgabe noch einmal durchgelesen.
Es wird ja nicht die grösste Primzahl gesucht, sondern der grösste Primzahlfaktor, das heisst zum beispiel von 120: 5.
120 : 2 = 60
60 : 2 = 30
30 : 2 = 15
15 : 3 = 5
5 : 5 = 1
2³*3*5
Hab's glaub ich. Der Server hat jedoch sehr lange zum rechnen:
PHP-Code:
<?php
$max = 600851475143;
$rest = $max;
$count = "2";
while($count<$max) {
if(is_int($rest/$count) and $rest!="1") {
$rest = $rest/$count;
$count = $count;
} elseif(!is_int($rest/$count) and $rest!="1") {
$rest = $rest;
$count++;
} elseif($rest=="1") {
$prime = $count;
$count = $max;
}
}
print $prime;
?>
Habe ich gleich mit dazu geschrieben:
Computerforum - Einzelnen Beitrag anzeigen - PHP-Projekt
Oke werde mir deine Ratschläge zu Herzen nehmen:
So ok?PHP-Code:
<?php
/*
*Aufgabenbeschreibung: Problem 3
*The prime factors of 13195 are 5, 7, 13 and 29.
*What is the largest prime factor of the number 600851475143 ?
*/
$max = 600851475143; //Zahl welche zerteilt wird
$rest = $max;
$count = 2;
while($count<$max) {
//$rest wird dividiert durch einen möglichst kleinen Faktor (z.B. 2)
//falls nicht mehr möglich, kommt 3 und so weiter
if(fmod($rest, $count)==0 and $rest!=1) {
$rest = $rest/$count;
$count = $count;
} elseif(fmod($rest, $count)!=0 and $rest!=1) {
$rest = $rest;
$count++;
} elseif($rest==1) {
$prime = $count;
$count = $max;
}
}
print '
<html>
<head>
<title>Problem 3 - Project Euler</title>
</head>
<body>
<h1>Problem 3 - Project Euler</h1>
<h2>Aufgabenbeschreibung</h2>
<p>The prime factors of 13195 are 5, 7, 13 and 29.<br />
What is the largest prime factor of the number 600851475143 ?</p>
<h2>Lösung</h2>
<p>
<b>'.$prime.'</b>
</p>
</body>
</html>';
?>
Jetzt zu Problem 4 :P
Ich weiss glaub ich wie es sein sollte.A palindromic number reads the same both ways. The largest palindrome made from the product of two 2-digit numbers is 9009 = 91 × 99.
Find the largest palindrome made from the product of two 3-digit numbers.
Also die grösste symetrische Zahl suchen mit 2 dreistelligen Faktoren.
Also muss ich mal plaindromic numbers zusammenstellen oder?
also 1001, 1111, 1221, 1331, 1441, 1551, .... 2112, 2222, 2332,... 3113, 3223... bis 9999
Dann weiss ich noch nicht wie weiter.
Sollte doch so gehen oder nicht?
PHP-Code:
<?
$plaindromic_numbers = array();
for($i = 1; $i<=9; $i++) {
for($j = 1; $j<=9; $j++) {
$zahl = $i.$j.$j.$i;
array_push($plaindromic_numbers, $zahl);
}
}
krsort($plaindromic_numbers);
foreach($plaindromic_numbers as $pl_n) {
for($i = 1; $i<=9; $i++) {
for($j = 0; $j<=9; $j++) {
for($k = 0; $k<=9; $k++) {
$faktor = $i.$j.$k;
if(is_int($pl_n/$faktor) {
$i = 10;
$faktor_2 = $pl_n/$faktor;
}
}
}
}
}
print $faktor.' ; '.$faktor_2;
?>
Nein, da fehlen dir noch eine Menge Palindrom-Zahlen. Du gehst nur von vierstelligen Zahlen aus, aber was passiert denn, wenn man zwei drei-stellige Zahlen mit einander multipliziert? 999 * 999 = 998.001 Das sieht mir nach einer sechs-stelligen Zahl aus .
genau, du solltest nicht vom produkt ausgehen, sondern von den zahlen, die du miteinander multiplizierst um die geht es ja schließendlich
versuchs erstmal so anzugehen: wie überprüfst du ob eine zahl ein palindrom ist?... was sind die eigenschaften?
wenn du das geschaft hast, bist du schon so gut wie fertig
Hast du schon einmal von Parametern gehört? Ansonsten funktioniert deine Funktion nicht: PHP: Funktionsparameter - Manual
Und Rückgabewerte solltest du dir auch anschauen:
PHP: Rckgabewerte - Manual
Das stimmt irgendwie nicht.PHP-Code:
<?
for($i = 999; $i>100; $i--) {
for($j = 999; $i>100; $i--) {
$result = $i*$j;
if($result==strrev($result)) {
//ist ein Palindrom:
$palindrom = $result;
$j = 100;
$i = 100;
}
}
}
print $result;
?>
<?php fehlt oben, da steht nur <?
bin grad am falschen pc, kann das nicht testen, sieht auf jedenfall richtig aus
eine sache fehlt, also der geht erst mit i=999 rein und j=999
dann wird j immer um eins verringert, also bis 100, dann erst i um 1 runter, also 998
so wird dann also am ehesten das höchste palindrom gefunden, was nur mit 999 malgenommen wird.. also 999*200 als beispiel, aber 980*800 ist ja höher
also musst du einfach beim if das i=100 und j=100 entfernen und dann mal selber schauen wie du das höchste aller palindrome findest
aber wieso benutzt du immer print? wieso nicht echo?
sind nur ein paar logikfehler drin, denke mal ist ok wenn ich es einfach mal berichtige
ausgabe:PHP-Code:
<?php
for($i = 999; $i>100; $i--) {
for($j = 999; $j>100; $j--) { // copy&paste fehler, da kommt überall j und nicht i hin
$result = $i*$j;
if($result==strrev($result)) { //ist ein Palindrom:
$palindrom = $result;
echo $i."<br>"; // test
echo $j."<br>"; // test
$i=100;
$j=100;
}
}
}
echo $palindrom; // palindrom und nicht result soll ausgeben werden
?>
995
583
580085
und da ich das schon gemacht habe, kann ich dir sagen, dass das ergebnis schon fast das doppelte sein sollte...
und da wären wir bei meinem angesprochenem problem:
jetzt musst du hinkriegen dass wirklich das höchste palindrom gefunden wird, und nicht das erste wo das i am höchsten ist und das j egal...so wird dann also am ehesten das höchste palindrom gefunden, was nur mit 999 malgenommen wird.. also 999*200 als beispiel, aber 980*800 ist ja höher
heißt also, dass auf jedenfall das i=100 und j=100 am ende weg muss, da nicht abgerbrochen werden soll