Das ganze sieht so aus:
int nein = 0;
if(eingabe%2 == 0)
{
Console.WriteLine("keine Primzahl");
}
else
{
for (int i = 3;i < eingabe / 3; i += 2)
{
if (eingabe % i == 0)
{
nein = 1;
break;
}
}
if(nein == 1)
{
Console.WriteLine("keine Primzahl");
}
else
{
Console.WriteLine("Primzahl!");
}
}
'eingabe' ist die Zahl, die der User eingegeben hat.
Ich möchte das Programm möglichst performant machen und frage mich, wie hoch ich die Grenze (hier 'i < eingabe / 3') ansetzen soll.
Meine Überlegungen: der grösste Teiler einer Zahl kann (wenn man von der Zahl selbst absieht) maximal die Hälfte der besagten Zahl sein - natürlich nur dann, wenn diese Zahl gerade ist. Mit meinem if teste ich nun bereits, ob die Zahl gerade ist oder nicht (weswegen ich in der for-Schleife auch nur ungerade Zahlen teste). Daher wäre 'eingabe / 2' als Grenze höher als notwendig.
Das Problem (bei ungerader Zahl):
wenn eingabe % 3 != 0, dann liegt die Grenze unter eingabe / 3
wenn eingabe % 5 != 0, dann liegt die Grenze unter eingabe / 5
wenn eingabe % 7 != 0, dann liegt die Grenze unter eingabe / 7
und so weiter ...
Kennt einer von euch ne vernünftige Lösung für das Problem?
Edit: Schreibfehler korrigiert