Bon, j'ai réussi ^^
Pour ceux qui seraient bloqués comme moi, il faut savoir que ma méthode prend beaucoup trop de temps
Cependant, j'ai écrit un autre code plus rapide. Voilà le principe : tout entier est un produit de nombres premiers. C'est à dire qu'après avoir divisé un nombre par des entiers, on finit par aboutir à un nombre divisible uniquement par lui même et 1 (donc premier)
L'idée est simple : on divise un nombre par les plus petits diviseurs possibles (on commence à 2 évidemment) :
- Si la division est possible, on divise le nombre et on ramène le diviseur à 2
- Sinon, on augmente le diviseur jusqu'à atteindre une division possible ou le nombre lui-même (qui sera donc notre plus grand nombre premier)
Voilà le code :
#include <iostream>
using namespace std;
int main()
{
long long testDivider = 2;
long long largestDivider = 0;
long long number = 600851475143;
while (testDivider != number)
{
if (number % testDivider == 0)
{
number /= testDivider;
testDivider = 2;
}
else
testDivider++;
}
largestDivider = testDivider;
cout << largestDivider;
}
En espérant avoir aidé certains ^^