C# :: Aufgabe #70 :: Lösung #3
14 Lösungen
#70
Finde die erste Zahl die durch alle Zahlen bis 30teilbar ist
Fortgeschrittener - C#
von 96fabi
- 25.09.2014 um 09:01 Uhr
Gesucht wird die erste Zahl, die durch alle Zahlen bis 30 geteilt werden kann(1-30).
Zum Einstieg kann man erstmal die erste Zahl suchen , die durch alle Werte bis 20 geteilt werden kann.
Dieses ist 232792560
Zum Einstieg kann man erstmal die erste Zahl suchen , die durch alle Werte bis 20 geteilt werden kann.
Dieses ist 232792560
#3
von Neicul (120 Punkte)
- 29.09.2014 um 10:28 Uhr
class Program
{
static void Main(string[] args)
{
int range;
while (true)
{
long result = 1;
Console.Write("Enter the range of the factors(1-x):");
range = IntCheck(Console.ReadLine());
List<int> factors=GetFactors(GetPrimes(range), range);
foreach (int i in factors)
{
result *= i;
}
Console.WriteLine("The smallest number divisible by those factors is:" + result);
Console.ReadLine();
}
}
//überprüft ob eine gültige Integer eingegeben wurde
static int IntCheck(string eingabe)
{
int zahl;
if (Int32.TryParse(eingabe, out zahl))
{
return zahl;
}
else
{
Console.Write("Enter a valid number:");
return IntCheck(Console.ReadLine());
}
}
//gibt uns eine Liste an Primzahlen die wir für die Faktorenzerlegung benötigen
static List<int> GetPrimes(int range)
{
List<int> primes = new List<int>();
bool prime = true;
for (int i = 2; i <= range; i++)
{
for (int x = 2; x < i; x++)
{
if (i % x == 0)
{
prime = false;
break;
}
}
if (prime)
{
primes.Add(i);
}
prime = true;
}
return primes;
}
//gibt uns die Faktoren der auszurechnenden Zahl
static List<int> GetFactors(List<int> primes, int range)
{
List<int> factors = new List<int>();
long nmbr=1;
for (int i = 1; i <= range; i++)
{
foreach (int p in primes)
{
for(int x = 0;x<factors.Count;x++)
{
nmbr*=factors[x];
}
if(nmbr%i==0)
{
nmbr = 1;
break;
}
else if(i%p==0)
{
factors.Add(p);
}
nmbr = 1;
}
}
return factors;
}
}
Kommentare:
Für diese Lösung gibt es noch keinen Kommentar
Seite 1 von 0
1
