Criptografia - algoritmo para calcular n=u*2^k

 
Vista:

algoritmo para calcular n=u*2^k

Publicado por gylles (2 intervenciones) el 01/02/2009 22:46:25
Hola a todos, tengo un problema con el algoritmo de rabin-Miller, no se como idear el primer paso de este algoritmo: es decir dado un numero "n" encontrar un numero "u" y un numero "k" que cumplan con la igualdad n=u*2^k, yo hise uno pero hay numeros "n" que no me devuelven los valores "u" y "k", alguien sabe de algun algoritmo o su forma de implementar gracias, les dejo el algoritmo que hice pero creo que no ha funcionado bien, de nuevo gracias

0 introduce un numero "n" impar
1 for(u=1 to u=n) //puros valores impares
2 while(u*2^k <= n)
3 if(u*2^k == n-1)
4 return u
5 return k
6 k++
7 return "no hay valores de u y k"

y este es el codigo guente

#include
#include
#include "conio.h"
#include "math.h"
#include "gmp.h"

using namespace std;
int potencia(int a,int n);

int main()
{
int u,i,k,l,n;
int z;
printf("ingresa el valor de n");scanf("%d",&n);
l=1; // esta variable solo la uso como contador para evitar que salgan al final dos respuestas
for(u=1;u<=n;u=u+2)//para contar solo numeros impares y evitar gasto de recursos
{
z=1;
k=1;
while((u*z)<=n)
{ //printf("El valor de z = %d ",z);
if( (u*z)==(n-1))
{
printf("El valor de k = %d ",k);
printf("El valor de u = %d ",u);
l++;
break;
}
k++;
z=potencia(2,k);
}
u=u;
}
if(l==1)
{
printf("No hay valores u y k");
}
getche();
}

int potencia(int a,int b)
{
int i,a1;
a1=1;
for(i=1;i<=b;i++)
{
a1=a1*a;
}
return a1;
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder