Red de conocimiento informático - Conocimiento informático - Cómo programar para encontrar un número primo de 200 dígitos

Cómo programar para encontrar un número primo de 200 dígitos

#includelt; stdio.hgt;

int sign=0;

int length(int a[]) //Encontrar la longitud de los bits efectivos de la matriz (Ocurrió un problema)

{

int c=0, i

for (i=0; ilt; 200amp; amp; a; [i]== 0; i )

{

//si(a[i]==0)

c ;

}

return 200-c;

}

void copy(int x[], int a[], int n) //El problema está en esta función de copia

{

int i

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

x [200-i-1 ]=a[200-1-i-length(a) 1 n-1];//Si tienes alguna duda busca este subíndice (ok)

}

void muli(int a[], int n) //Función para multiplicación de matrices

{

int i, c=0;

for(i= 0;ilt;length(a);i )

{

a[200-1-i]=a[200-1-i]* n10 c;

c=a[200-1-i]*n/10;

}

a[200-1-i]=c ; //Subíndice miedo Incorrecto (¿vale?)

}

void add(int a[])

{

int i , c=0 ;

for(i=0;ilt;length(a);i )

{

a[200-1-i] =(a[ 200-1-i] 1)10 c;

c=(a[200-1-i] 1)/10;

}

a [200-i-1]=c; //¿vale?

}

void dedu(int a[], int b[], int n)/ /de una resta de Array desde el enésimo bit al primer bit (1, 2, 3...n)

{

int i, c=0;

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

{

if(a[200-1-i-(length(a) n)]lt; b[200- 1-i])

{

a[200-2-i-(length(a) n)]-- //El subíndice puede estar incorrecto

a[200-1-i-(longitud(a) n)]=10 a[200-1-i-(longitud(a) n)]-b[200-1-i] ; // Siguiente La etiqueta puede estar incorrecta

}

else

a[200-1-i-(length(a) n)]=a [200-1- i-(length(a) n)]-b[200-1-i]; //El subíndice puede estar incorrecto

}

}

bool isbig(int b[], int a[])

{

int i;

f

o(i=0;ilt;199;i)

if(b[i]!=a[i]amp;amp;b[199]!=a[199]-1)

devuelve falso;

devuelve verdadero;

}

int scomp(int a[], int b[])

{

int i

if(longitud(a)gt; longitud(b))

devuelve 1; > else if(length(a)lt; length(b))

return -1;

else //Cuando las dos longitudes son iguales

{ for(i=0;ilt;length(a);i )

if(a[i]gt;b[i]) devuelve 1;

for(i=0 ;ilt;longitud(a);i )

if(a[i]lt;b[i]) devuelve -1;

devuelve 0;}

}

void permanezca(int a[200], int b[200])//Algoritmo para dividir números representados por matrices (solo dos números) //Se puede dividir y devuelve verdadero

{

signo=0;

int i, k, l1=longitud(a), l2=longitud(b); x[200]={0};

int c[200]={0};

if(scomp(a,b)==0) //obtener Modificar

sign=1|sign;

else if(scomp(a,b)gt;0/*||length(a)gt;length(b)*/)

{

copiar(x, a, l2);

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

si( a[200-1-i-l1 1]lt; b[200-1-i-l2 1])

copiar(x, a, l2 1);

/ /Esta función debe ser reescrita // Su función es tomar longitudes on length(b)

/*Dividir números con dígitos iguales*/

for( i=9;igt ;0;i--)//El caso donde el cociente no es 0

{

for(k=0;klt;200;k)

{

c[k]=b[k]; //El problema está aquí

}

muli(b, i); función de multiplicación

if(scomp(x, b)gt;=0)//Esto debe modificarse

{

dedu(a, b, longitud(x));

romper;

}

}

permanecer(a, c);

}

}

bool isprimer(int a[])

{

int

divisor[200]={0};

for(divisor[199]=2;!isbig(divisor, a); agregar(divisor))

{

permanecer (a, divisor);

si (signo) devuelve falso;

}

devuelve verdadero;

}

void main()

{

int prime[200]={1, 0}, k

for(k; =0; /*!isbig(prime)*/klt; 200; add(prime), k ) //Necesitas agregar un isbig aquí

if(isprimer(prime))

{

int i

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

printf("d",prime[i]

puts("es un número primo");

}

else

{

int i ;

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

printf("d",prime[i]);

puts( "Números no primos");

}

}

Esto es lo que pasé un día escribiendo, pero los resultados no se pueden mostrar porque no lo he hecho. Pude mostrar los resultados durante los dos días de exámenes. No tengo tiempo para depurarlo. Si quieres echarle un vistazo, solo echa un vistazo al algoritmo y mejóralo para ver si funciona. Si tengo tiempo, lo depuraré nuevamente una vez que funcione, te lo dejo a ti. Si no tengo tiempo, lo siento. (No importa si lo das o no, porque no di una respuesta satisfactoria)