Je tente de résoudre le problème this lors de la programmation. Voici la question.Échec du programme de factorisation des primes (C++)
Les principaux facteurs de 13195 sont 5, 7, 13 et 29.
Quel est le plus grand facteur premier du nombre 600851475143?
Maintenant, j'ai concocté un programme C++, qui essaie de le vérifier par la force brute, cependant, lors de l'exécution de son coincé à 5. Voici le programme
#include <iostream>
#include <math.h>
using namespace std;
const long long no = 600851475143;
long long isprime(long long p)
{
long long reply = -1;
long long i = 2;
while (i < pow(p, 0.5)) {
if (i % p == 0)
reply = i;
}
if (reply == -1){
return 0;
cout<<" yup its prime "<<endl;
}
else
return reply;
}
long long factor(long long x)
{
for (long long i = 2; i < no; i++) {
cout<<"Trying "<<i<<endl;
if ((isprime(i) == 0)&& (no % i == 0)) {
return i;
cout<<"found "<<i<<endl;
break;
}
}
}
int main()
{
long long ans = no;
while (ans != 1) {
cout << factor(ans) << endl;
ans = ans/factor(ans);
}
}
et c'est la sortie Je ne comprends vraiment pas pourquoi il est bloqué au numéro 5, quelqu'un peut-il m'aider?
EDIT: Merci b13rg, j'ai réalisé mon erreur. J'ai maintenant un meilleur algorithme, je l'ai collé pour tous ceux qui en ont besoin.
#include<iostream>
#include<math.h>
using namespace std;
long long fun (long long x)
{
for(long long i=2; i<sqrt(x);i++){
while (x%i==0){
cout<<i<<endl;
x=x/i;
}
}
}
int main(){
fun(600851475143);
return 0;}
Veuillez apprendre à utiliser le débogueur pour résoudre ces problèmes. Marquer la question pour la fermeture. – Mahesh