Red de conocimiento informático - Problemas con los teléfonos móviles - Preguntas de programación de VC Programación para descomponer números enteros mayores que 1 en factores primos y encontrar su suma

Preguntas de programación de VC Programación para descomponer números enteros mayores que 1 en factores primos y encontrar su suma

/*******Decompose.h****************/

#define IS_PRINT_FACTOR 1 //Definir si para imprimir el resultado medio

clase Descomponer

{

privado:

unsigned __int64 *num;

sin firmar __int64 *suma;

int n;

público:

Descomponer();

Descomponer(int n, sin firmar __int64 * num);

virtual ~Decompose();

int primeNum(unsigned __int64 x, unsigned __int64 *fac

void primeNum(); p>

void printSum();

};

El siguiente es el archivo cpp

/////////// ////// ///////////////////////////////////////////// ////////// /////////////////

// Decompose.cpp: implementación de la clase Decompose.

//

/////////////////////////////////////// ///////////// ///////////////////////

#include "Decompose.h"

#include "stdio.h"

#include "windows.h"

/////////////// //////////////// /////////////////////////////////// ////////

// Construcción/Destrucción

/////////////////////// //////////////////// /////////////////////////////// //

Descomponer::Descomponer()

{

num=NULL

suma=NULL; p> n=0;

}

Descomponer ::Descomponer(int n, unsigned __int64 *num)

{

esto -gt; n=n;

this-gt; num=nuevo sin firmar __int64[n];

suma=nuevo sin firmar __int64[n];

for(int i=0;ilt;n;i)

this- gt;num[i]=num[i];

}

Descomponer ::~Descomponer()

{

si (num!=NULL)

eliminar[]num

;

if(suma!=NULL)

eliminar[]suma;

}

unsigned __int64 sqrt64(unsigned __int64 x)

{

int i=(sizeof(unsigned __int64)lt;lt;3)-1;

if(x==(unsigned __int64)1 )

return (unsigned __int64)1;

while(igt;=0)

{

if((xgt;gt ;i)==1)

break;

i--;

}

return (unsigned __int64)1lt;lt ;((i 2)gt;gt;1);

}

int Descomponer::primeNum(unsigned __int64 x, unsigned __int64 *fac)

{

unsigned __int64 i=2, sqrtx=sqrt64(x);

int flen=0

while(ilt; sqrtx)

{

if(xi==0)//si i es el factor de x

{

fac[flen]=i;

x/=i;

sqrtx=sqrt64(x);

}

si(i==2) i;

else i =2; //si x no es par, entonces el factor de x debe ser impar

}

fac[flen]=x;

return flen; // flen es el número de números enteros en fac

}

void Decompose::primeNum()

{

unsigned __int64 fac[64];

int i, j, flen

for(i=0; ilt; n; i)

{

flen=primeNum(num[i], fac);

#if IS_PRINT_FACTOR

printf("I64u=", num[ i]);

for(j=0;jlt;flen;j)

{

printf("I64u", fac[j]);

if(j!=flen-1)

printf("x");

else printf("\n");

}

#endif

for(j=0,sum[i]=0;jlt;flen;j)

suma[i] =fac[j];

}

}

void Descompose::printSum()

>{

int i

for(i=0; ilt; n; i )

printf("suma(I64u)=I64u\n" , num[i], suma[i]);

}

void main()

{

LARGE_INTEGER t1, t2 , frq;

unsigned __int64 num[]={1234, 1234567, 123456789, 1234567891011, 12345678910111213};

int i, n=sizeof(num)/sizeof(*num)

Descomponer d(n, num);

QueryPerformanceFrequency(amp; frq

QueryPerformanceCounter(amp; t1); > d.primeNum();

QueryPerformanceCounter(amp;t2);

printf("\n");

d.printSum();

printf("\ntime=f seg\n", (double)(t2.QuadPart-t1.QuadPart)/frq.QuadPart);

}