www.vorhilfe.de
Vorhilfe

Kostenlose Kommunikationsplattform für gegenseitige Hilfestellungen.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Forenbaum
^ Forenbaum
Status Englisch
  Status Grammatik
  Status Lektüre
  Status Korrekturlesen
  Status Übersetzung
  Status Sonstiges (Englisch)

Gezeigt werden alle Foren bis zur Tiefe 2

Navigation
 Startseite...
 Neuerdings beta neu
 Forum...
 vorwissen...
 vorkurse...
 Werkzeuge...
 Nachhilfevermittlung beta...
 Online-Spiele beta
 Suchen
 Verein...
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Weitere Fächer:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
Forum "Mathematica" - Primfaktorzerlegung
Primfaktorzerlegung < Mathematica < Mathe-Software < Mathe < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "Mathematica"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

Primfaktorzerlegung: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 23:51 So 25.04.2010
Autor: Andariella

Aufgabe
Defi nieren Sie in Mathematica eine eigene Funktion, die die Primfaktorzerlegung einer natürlichen Zahl bestimmt. Testen Sie Ihre Funktion an der Zahl 504.
(Nach dem Hauptsatz der Zahlentheorie existiert zu jeder natürlichen Zahl eine (bis auf Reihenfolge) eindeutige Primfaktorzerlegung!)

Hallo,

wahrscheinlich für Könner eine absolut einfache Aufgabe. Ich allerdings hatte erst zwei Stunden Computeralgebra und bin schon froh, dass ich inzwischen rausgefunden habe, wie man einen Befehl abschickt. Ich hab auch keinerlei Erfahrung mit ähnlichen Programmen oder dem Programmieren allgemein. Mein Ansatz ist daher leider trotz stundenlanger Rumprobiererei sehr dürftig:

Ich möchte das irgendwie mit der While-Funktion machen. Wie sie funktioniert, habe ich inzwischen glücklicherweise grob verstanden.

Mein Plan:
Funktion definieren mit einer Variablen k.
Dann soll ein n bei 2 beginnen und so lange getestet werden, bis es nicht mehr kleiner als k ist.
Das n soll getestet werden, ob es eine Primzahl ist (PrimeQ[n]) und wenn es eine ist, dann soll getestet werden, ob k durch n ohne Rest teilbar ist, wenn ja dann soll n ausgegeben werden (Print[n]) oder besser noch in eine Liste eingefügt werden (Append[liste]??? oder so), die dann am ende ausgegeben wird. dann soll er nochmal das gleiche n prüfen (kann ja sein, dass es mehrmals als Primfaktor vorkommt. Wenn solch eine Prüfung verneint würde, soll er beim n eins dazu zählen (n++).

Das magere bißchen habe ich bis jetzt:
n=2; test[k_]:= While[n<k, .............Print[n];n++]

Aber wie bekomme ich meinen Plan jetzt so hingeschrieben, dass Mathematica versteht, was ich will? :D

Ich hoffe, dass sich jemand erbarmt, mir etwas zu helfen! Vielen Dank!

Ich habe die Frage in keinem anderen Forum gestellt.


        
Bezug
Primfaktorzerlegung: Bemerkung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 01:30 Mo 26.04.2010
Autor: Andariella

nach einem positiven Durchgang (wenn also ein Primfaktor n gefunden wurde) soll k durch k/n ersetzt werden. das hatte ich noch vergessen zu schreiben.

Bezug
        
Bezug
Primfaktorzerlegung: Antwort
Status: (Antwort) fertig Status 
Datum: 10:53 Mo 26.04.2010
Autor: Al-Chwarizmi

Hallo Andariella,

obwohl ich Mathematica schon recht lange kenne (aber
nur von Zeit zu Zeit einmal nutze), habe ich in solchen
Dingen noch keine große Routine. Immer wieder muss
ich auch nachschlagen, wie einzelne Befehle genau
aussehen und wie ihre Syntax ist. Lange "Mathematica-
Einzeiler" versuche ich im allgemeinen zu meiden; da
ist mir eine konventionelle Programmiersprache (bei
mir meistens Pascal) lieber ...
Ich würde also zuerst eine mehrzeilige Funktion ent-
werfen und erst dann versuchen, daraus den Mathema-
tica-Einzeiler (oder allenfalls auch eine mehrzeilig
notierte Funktion) zu erzeugen.
Mit deinem Ansatz bist du auf dem (einem möglichen)
richtigen Weg. Wenn ich richtig verstanden habe, läuft
es auf eine rekursive Definition heraus, wobei als output
der Funktion test[k] die Liste der Primteiler von k
entstehen soll. Man fängt also mit der leeren Liste {}
an und fügt ihr nacheinander (rekursiv) alle gefundenen
Primteiler in aufsteigender Reihenfolge zu.

Jetzt muss ich zuerst selber eine Weile hirnen, um eine
kleine entsprechende rekursive Pascal-Funktion zu
entwerfen ...

LG    Al-Chw.

Bezug
                
Bezug
Primfaktorzerlegung: meine Pascal-Funktion
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 13:25 Di 27.04.2010
Autor: Al-Chwarizmi

Hallo Andariella,
  

> Jetzt muss ich zuerst selber eine Weile hirnen, um eine
>  kleine entsprechende rekursive Pascal-Funktion zu
>  entwerfen ...


Inzwischen habe ich es geschafft, ein entsprechendes Pascal-
programm zu basteln, das funktioniert. Die rekursiv definierte
Funktion "primelist(k)" sieht so aus:

function primelist(k:integer):liste;
  var i: integer;
  begin
   if k=1 then primelist:=emptylist
          else begin
                i:=leastprime(k);
                primelist:=append(primelist(k div i),i)
               end
  end;

Das könnte inhaltlich so ziemlich genau dem entsprechen, was
halirutan inzwischen geliefert hat. Natürlich musste ich die
Funktionen "leastprime(k:integer)" , "append(l:liste;i:integer)"
sowie die Liste "emptylist" zuerst selber kreieren, da solche
Sachen in Pascal nicht einfach so verfügbar sind ...


LG    Al-Chwarizmi



Bezug
                        
Bezug
Primfaktorzerlegung: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 13:44 Di 27.04.2010
Autor: Andariella

danke! :)

Bezug
                
Bezug
Primfaktorzerlegung: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 01:22 Sa 15.05.2010
Autor: Peter_Pein


>  ... Lange "Mathematica-
>  Einzeiler" versuche ich im allgemeinen zu meiden;

[happy] ich nicht [happy]

1: In[1]:= pf[n_]:=Block[{pt=Select[Divisors[n],PrimeQ]},
2: {#,Function[p,Length[NestWhileList[#/p&,n/p,IntegerQ,1]]-1]@#}&/@pt]
3: In[2]:= SameQ@@Through[{FactorInteger,pf}[504]]
4: Out[2]= True


sorry, aber ich konnte einfach nicht anders
(Neuroleptika sind alle)
Peter


Bezug
        
Bezug
Primfaktorzerlegung: Antwort
Status: (Antwort) fertig Status 
Datum: 22:38 Mo 26.04.2010
Autor: halirutan

Moin,

> Ich hoffe, dass sich jemand erbarmt, mir etwas zu helfen! Vielen Dank!


naja, ich hab mal "Hilfe" bei Wikipedia nachgeschlagen: "Sie dient dazu, einen erkannten Mangel oder eine änderungswürdige Situation zu verbessern." Laut der Definition kann ich dir nicht helfen, denn ich kann weder den Mangel beheben, dass du keine konkrete Vorstellung von einem Algorithmus fuer dein Problem hast, noch kann ich dir ueber die aenderungswuerdige Situation helfen, dass du wenig Mathematica-Syntax beherrschst. Das musst du dir selbst erarbeiten.

Obwohl die Erfahrung zeigt, dass fertige Loesungen bei den Hilfesuchenden meist das Gegenteil von Erkenntniszuwachs bewirken, lasse ich es mal drauf ankommen:

1: primerize[n_] := 
2:  Block[{i, res = {}, nn = n}, 
3:   For[i = 2, i <= nn, i++, While[Mod[nn, i] == 0, AppendTo[res, i];
4:     nn /= i]];
5:   Tally[res]]
6:
7: primerize[504]


Das ist der am leichtesten zu verstehende "Nicht-Einzeiler", der mir eingefallen ist.
Geh Zeile fuer Zeile durch und versuch zu verstehen, was genau passiert.

Ich hoffe es hilft trotzdem.

Cheers
Patrick

PS: Da es "Tally" erst am MMA 6 gibt, laeuft es mit 5.2 nicht.

Bezug
        
Bezug
Primfaktorzerlegung: Danke!
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 11:24 Di 27.04.2010
Autor: Andariella

Vielen Dank für eure Mühe, das funktioniert bei mir jetzt auch (habe zum glück MMA 7). Muss mir das jetzt aber noch genauer anschauen, die nächsten Aufgaben werden sicher nicht leichter!

Bezug
Ansicht: [ geschachtelt ] | ^ Forum "Mathematica"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
www.englischraum.de
[ Startseite | Forum | Wissen | Kurse | Mitglieder | Team | Impressum ]