Feedback

C# - "echte" Teiler Summe berechnen

Veröffentlicht von am 1/30/2007
(2 Bewertungen)
Das Programm durchsucht einen Integer und gibt die echte Teiler Summe zurück
(Echte Teiler sind alle, außer der Zahl selbst)
Es ist die beste Methode die mir eingefallen ist, denke jedoch nicht, dass sie perfekt ist.
Natürlich gilt das ganze nur für "Natürliche Zahlen", da man die Teilersummen nur von Natürliche Zahlen bestimmen kann.
/// <summary>
/// Klasse gibt nach Übergabe eines Integer an "Teiler.Summe" die Summe
/// der echten Teiler aus.
/// </summary>
public class Teiler
{
	public int Summe(int zahl){
	int intSumme = 0;
	int intmax = 0;
		//Zahl wird bis zur Hälfte durchsucht
		for(int i = 1;i<(zahl/2);i++)
		{
		  if (zahl % i == 0)
			{
				if (zahl/i == intmax)
				{
					break; 
					//Abbruchkriterium, falls die Zahlen sich wiederholen
				}//of if
			intmax = i;
							intSumme = intSumme + i;
			intSumme = intSumme + zahl/i;
			}//of if

		}//of for
		intSumme = intSumme - zahl; 
		//Um Summe der Echten Teiler zu erhalten wird die Zahl von
		//der Teilersumme abgezogen			
		return intSumme;
	}//of Summe()
}
Abgelegt unter Teiler, Teilersumme, echte Teiler, Summe, Mathe.

4 Kommentare zum Snippet

herbivore schrieb am 1/30/2007:
In der Tat ist das noch nicht perfekt. :-) Berechne mal die Teilersumme von -12.
Till-H schrieb am 1/30/2007:
Ja..ok..hast recht.. es geht hier natürlich nur um positive Zahlen die eingesetzt werden können..
Till-H schrieb am 1/31/2007:
Kleine Anmerkung noch..Recherchen meinerseits ergaben, dass man Teilersummen nur von natürliche Zahlen bestimmen kann!
D.h. -12 ist keine Natürliche Zahl, da natürliche ja nur die Positiven sind. Von daher ist die Klasse in dem Punkt wohl perfekt ;)
Danke trotzdem für die Anmerkung
Klemens Nanni schrieb am 3/10/2010:
Man kann das ganze auch ein wenig simpler formulieren:
public int Teilersumme(int n)
{
    var s = n + 1;
   
    for (i = 2; i <= n / 2; i++) {
        if (n % i == 0) s += i;
    }
   
    return s;
}
 

Logge dich ein, um hier zu kommentieren!