Sprache: C#
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()
}
/// <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()
}
Alte URL:
/snippet/echte-teiler-summe-berechnen/451
In der Tat ist das noch nicht perfekt. 🙂 Berechne mal die Teilersumme von -12.
Ja..ok..hast recht.. es geht hier natürlich nur um positive Zahlen die eingesetzt werden können..
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
Man kann das ganze auch ein wenig simpler formulieren:
[code]public int Teilersumme(int n)
{
var s = n + 1;
for (i = 2; i <= n / 2; i++) { if (n % i == 0) s += i; } return s; } [/code]