Cómo hacer un programa en c ++ que pueda factorizar un número de 10 dígitos

Factorizar un número grande [me refiero a más de 100 dígitos] es complejo, pero para un número hasta 10 ^ 18 tenemos varios algoritmos.

1. División de prueba.

2.Pollard Rho, Brent Pollard Rho, Pollard p-1 … y muchos otros.

Llegando a tu pregunta. Para factorizar completamente un número, no necesitamos encontrar todos los números primos menores que iguales al número dado, en realidad solo necesitamos menos que igual a su raíz cuadrada del número. Puede encontrar una explicación en la web por la que solo necesitamos hasta sqrt () del número. A continuación se muestra el código cpp [Implementación de la división de prueba] Ver el código en acción Ideone.com

#include

using namespace std;

#define max 316230

#define ll long long

vectorprimes;

void genPrimes(){

vectorisPrime(max+4,1);

for(int i=2;i*i<=max;i++){

if(isPrime[i]){

for(int j=i;j*i<=max;j++)isPrime[i*j]=0;//marking all nultiple of prime

}

}

primes.push_back(2);

for(int i=3;i<max;i+=2){

if(isPrime[i]){

primes.push_back(i);

}

}

}

map factorNumber(ll n){

map pfact;

for(int i=0;primes[i]*primes[i]<=n;i++){

if(n%primes[i]==0){

while(n%primes[i]==0){

pfact[primes[i]]++;

n/=primes[i];

}

}

}

if(n>1)pfact[n]++;

return pfact;

}

int main() {

ll num;

genPrimes();//genrate all prime till sqrt(10^11)

cin >> num;

map ans = factorNumber(num);

map::iterator it;

for(it=ans.begin();it!=ans.end();it++){

cout<first<<"^"<second<<" ";

}

return 0;

}

#include
#include
usando el espacio de nombres estándar;
int main ()
{
unsigned long long int n;
sin signo largo largo int i, t;
cout << "ingrese no";
cin >> n;
mientras que (n% 2 == 0)
{
n = n / 2;
cout << 2 << "";
}
t = sqrt (n);
para (i = 3; i <= t; i = i + 2)
{
mientras que (n% i == 0)
{
n = n / i;
cout << i << "";
}
}
si (n> 2)
cout << n;
devuelve 0;
}

salida para algunos casos:

Estoy de acuerdo en que esta factorización en serie es lenta y puede fallar en el límite de tiempo para grandes números.

More Interesting

¿Cuántas matemáticas se necesitan en la codificación?

¿Quiénes son las estrellas en ascenso en la informática teórica?

¿Cuál es la diferencia entre la Olimpiada de informática zonal y la Olimpiada cibernética zonal? ¿Cuál deberíamos elegir?

¿Cómo se usan las matemáticas en informática?

¿Cómo funciona el proceso de eliminación en una lista vinculada? ¿Es solo eliminando la referencia del nodo? ¿Qué mecanismo se utiliza para disponer un nodo?

¿Es teóricamente posible que un algoritmo tenga una complejidad negativa?

¿La investigación colaborativa dificulta el uso de mejores herramientas (por ejemplo, TeXmacs en lugar de TeX / LaTeX)?

¿Cuáles son algunos de los problemas NP-completos más difíciles?

Estoy en mi último año como estudiante de ciencias de la computación y me encanta resolver problemas. Siempre trato de resolver los problemas, pero no logro crear soluciones rápidamente. Quiero mejorar para construir una lógica clara. ¿Dónde me estoy equivocando o qué debo hacer?

¿Podemos aplicar el aprendizaje automático en cualquier idioma o hay algo específico que sirva para ese propósito? ¿Cuáles son los modelos matemáticos efectivos utilizados principalmente en ML?

¿Cuál es más grande: el universo computacional o el matemático? ¿Alguno subsume al otro?

¿Qué es la combinatoria en matemáticas discretas?

¿Cómo pruebo o refuto lo siguiente: f (n) = o (g (x)) implica f (n) = O (g (n))?

¿Cómo se mejora su escritura técnica / científica?

¿Cuáles son algunas de las ofertas de colocación dadas a los estudiantes de matemáticas de IIT-K? ¿Son equivalentes a los chicos de CS?