AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

x*y=z Lösungsmenge

Ein Thema von Neutral General · begonnen am 9. Dez 2006 · letzter Beitrag vom 10. Dez 2006
Antwort Antwort
Seite 2 von 2     12   
Cöster

Registriert seit: 6. Jun 2006
589 Beiträge
 
Turbo Delphi für Win32
 
#11

Re: x*y=z Lösungsmenge

  Alt 9. Dez 2006, 18:11
Zitat von dino:
Zitat von Jürgen Thomas:
Zitat von dino:
bei ein einfangen und wenn z mod x = 0 ist x und z/x in deinem arry oder was auch immer speichern (array of booleans wäre da gut) und zusätzlich das z/x in iene variable speichern, weil sobald du mit x an die Zahl angelangt bist, brauchst du sie nicht mehr überprüfen und bist fertig
ups

also:

var i,i2:integer
var drin:array[1..z] of boolean

i:=1

repeat

if z mod i = 0 then begin drin[i]:= true; drin[z/i]:= true; i2:=z/i end;

inc(i)

until i>=i2

so klar?
Sicher, aber dir scheinen die Posts von Khabarakh und Ratte noch nicht klar zu sein: until i>=Sqrt(z)

Edit: Bei größeren Zahlen nehm ich aber an, dass es mit Primfaktorzerlegung schneller geht. Die dann aber natürlich nicht so machen, wie in Beitrag #5 beschrieben.
  Mit Zitat antworten Zitat
dino

Registriert seit: 15. Jul 2006
Ort: Bad Münstereifel
627 Beiträge
 
Delphi 5 Professional
 
#12

Re: x*y=z Lösungsmenge

  Alt 10. Dez 2006, 00:31
wie macht mans denn?
  Mit Zitat antworten Zitat
Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#13

Re: x*y=z Lösungsmenge

  Alt 10. Dez 2006, 11:01
Zitat von dino:
ups

also: // usw.

so klar?
Bei meiner Nachfrage in #6 ging es mir weder um Mathematik noch um Programmierung, sondern um die deutsche Sprache: Vor etwa 30 Jahren hatte ich Mathematik studiert und ähnliche Probleme bearbeitet. Aber bei Deiner von mir kritisierten Aussage habe ich überhaupt nichts - nichts! - verstanden.

So etwas passiert in Foren leider häufiger; aber das war mir zuviel. Ich bitte darum:
  1. zuerst denken
  2. dann formulieren
  3. dann kontrollieren, auch Lesbarkeit und Verständlichkeit für den Leser
  4. dann absenden
und nicht mehrere dieser Schritte vergessen. Jürgen
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat
dino

Registriert seit: 15. Jul 2006
Ort: Bad Münstereifel
627 Beiträge
 
Delphi 5 Professional
 
#14

Re: x*y=z Lösungsmenge

  Alt 10. Dez 2006, 14:57
ja tschuldige, aber darum hab ichs ja dann ohne Deutsch formuliert...
  Mit Zitat antworten Zitat
Cöster

Registriert seit: 6. Jun 2006
589 Beiträge
 
Turbo Delphi für Win32
 
#15

Re: x*y=z Lösungsmenge

  Alt 10. Dez 2006, 16:28
Zitat von dino:
wie macht mans denn?
Ich würd's so machen:

Code:
Laufvariable I, Anfangswert: 2
Wiederhole:
   Wenn die Zahl Z nicht durch I teilbar ist
      -> I erhöhen
   sonst
      -> I zu den Primfaktoren hinzufügen
      -> Z := Z div I
bis I*I > Z
Das könnte man dann noch dadurch optimieren, dass man z.B. I nicht um 1 erhöht, sondern, nachdem man mit der 2 fertig ist, immer um 2 erhöht (also nur ungerade Zahlen probiert). Man könnte sogar alle Primzahlen bis zu einer bestimmten Grenze in einem array liegen haben und mit I dann die einzelnen Array-Werte durchgehen.

Die Möglichkeiten für x bzw. y sind die unterschiedlichen Produkte aller möglichen Kombinationen der Primfaktoren.
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#16

Re: x*y=z Lösungsmenge

  Alt 10. Dez 2006, 16:32
Ich habe doch schon längst erwähnt, dass es in der Codelib eine optimierte Trial Division-Variante gibt . Und wo man noch bessere Verfahren finden kann, dürfte hoffentlich bekannt sein.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#17

Re: x*y=z Lösungsmenge

  Alt 10. Dez 2006, 18:45
Nehmt doch bitte mkinzlers Vorschlag:
Delphi-Quellcode:
For x := 2 to Trunc (sqrt(z)) do
  if z mod x = 0 then
    OUTPUT (x,z div x)
Wobei man sich bei OUTPUT ja denken kann, das hier z.B. in einem Memo irgendwas ausgegeben wird.
Mit Primfaktoren geht das auch, ist vielleicht schneller, aber dezent komplizierter. Das Problem ist ja, das man fast alle Variationen der Primfaktoren erzeugen muss. Möglich, aber nicht trivial.

Wenn es nicht um astronomisch hohe Zahlen geht, dann reicht doch die o.g. Variante.

Vermutlich geht es auch mit diophantischen Gleichungen und/oder Ansätzen aus der Kongruenzmathematik, aber da bin ich überfragt.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:24 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz