C# :: Aufgabe #70 :: Lösung #13
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
#13
von hollst (13980 Punkte)
- 10.11.2017 um 16:51 Uhr
using System;
using System.Collections.Generic;
using System.Numerics;
using System.Diagnostics;
namespace aufgabe_70 {
static class Program {
static void Main() {
Stopwatch sw = new Stopwatch();
sw.Start();
Console.WriteLine(((BigInteger)1E+5).main());
Console.WriteLine(sw.Elapsed.ToString());
sw.Restart();
Console.WriteLine(((BigInteger)4E+4).main());
Console.WriteLine(sw.Elapsed.ToString());
sw.Restart();
Console.WriteLine(((BigInteger)20).main());
Console.WriteLine(sw.Elapsed.ToString());
sw.Restart();
Console.WriteLine(((BigInteger)30).main());
Console.WriteLine(sw.Elapsed.ToString());
Console.ReadKey(true);
}
static string main(this BigInteger bis) {
BigInteger[] primes = bis.primes_until();
BigInteger erg = 1;
for (var i = 0; i < primes.Length; i++) {
BigInteger p = primes[i];
while (p * primes[i] <= bis)
p *= primes[i];
erg *= p;
};
return (erg.ToString("n0"));
}
static BigInteger[] primes_until(this BigInteger m) {
List<BigInteger> p = new List<BigInteger>(); p.Add(2);
for (BigInteger i = 3; i <= m; i += 2) {
bool bo_isprime = true;
for (var j = 0; j < p.Count; j++)
if (i % p[j] == 0)
{ bo_isprime = false; break; }
if (bo_isprime)
p.Add(i);
}
return p.ToArray();
}
}
}
Kommentare:
Für diese Lösung gibt es noch keinen Kommentar
Seite 1 von 0
1
