1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| static void Main(string[] args)
{
// Pas de résultat si result vaut 0
long result = GetFactors(600851475143).Where(a => EstNombrePremier(a)).OrderByDescending(a => a).FirstOrDefault();
// result vaut : 6857
}
private static IEnumerable<long> GetFactors(long num)
{
for (long factor = 1; factor * factor <= num; factor++)
{
if (num % factor == 0)
{
yield return factor;
if (factor * factor != num)
yield return num / factor;
}
}
}
public static bool EstNombrePremier(double n)
{
int i;
int racine;
bool fini;
decimal debRacine = Convert.ToInt32(Math.Sqrt(n));
racine = Convert.ToInt32(Math.Truncate(debRacine));
fini = false;
i = 3;
if (n < 2) { fini = true; }
else if (n != 2)
{
if (n % 2 == 0)
{
fini = true;
}
else
{
while ((!fini) && (i <= racine))
{
if (n % i == 0) { fini = true; }
else { i = i + 2; }
}
}
}
return (!fini);
}
} |
Partager