Ola pessoal estou fazendo um trabalho e não estou conseguindo implementar uma das funções.
esta função esta definida na pagina cinco, é a terceira operação, não estou conseguindo fazer a inversa. de f(x)=(45^x)mod257
void bolaPonto()
{
unsigned long long entradaDE64bits = 3544952156018063160ULL;
unsigned long long y = 0;
int x = 0;
int e = 0;
int d = 56; // pacar 7 bytes para a direita
while( e != 64 )
{
x = ( entradaDE64bits << e ) >> d;
e = e + 8;
y = y << 8;
y = y | poww(x);
}
}
unsigned int poww( int expoente )
{
unsigned int pot = 1;
while( expoente != 0 )
{
pot *= 45;
pot %= 257;
expoente--;
}
if( pot == 256 )return 0;
return pot;
}
Rode o código abaixo e veja o resultado esperado para f(x) e a inversa de f(x). Não estou corrigindo seu algoritmo, apenas estou dando os valores esperados para você mesmo se ajudar a corrigir o seu algoritmo.
package guj;
import java.math.BigInteger;
public class CalculoFX {
static int[] tabFX() {
int[] f = new int[256];
BigInteger bi = BigInteger.valueOf(45L);
for (int x = 0; x < 256; ++x) {
BigInteger r = bi.modPow(BigInteger.valueOf((long) x), BigInteger.valueOf(257L));
f[x] = r.intValue() == 256 ? 0 : r.intValue();
}
return f;
}
static int[] tabInvFX(int[] tabFX) {
int[] f = new int[256];
for (int x = 0; x < 256; ++x) {
f[tabFX[x]] = x;
}
return f;
}
/**
*/
public static void main(String[] args) {
int[] fx = tabFX ();
int[] invFx = tabInvFX (fx);
System.out.println ("------f(x)-------");
for (int i = 0; i < 256; ++i) {
System.out.println ("f(" + i + ")= " + fx[i]);
}
System.out.println ("------inv f(x)-------");
for (int i = 0; i < 256; ++i) {
System.out.println ("inv f(" + i + ")= " + invFx[i]);
}
}
}
Hum, nem percebi a dica que eu dei calculando a inversa - ha ha ha. Se você for esperto, vai perceber a solução para seu problema da inversa. Note que é uma resolução geral para inversas de funções