Inversão da f(x)=( 45^x )mod257 linguagem C

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

Pdf com definição: http://www.ime.usp.br/~rt/mac57232012/crproj2012.pdf

obs.: amodx = a%x;

obs2.: fiz a f(x)

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;
}

quem puder ajudar eu agradeço.

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 :slight_smile:

Se sua digníssima excelência tivesse lido este parágrafo do seu PDF com mais atenção, teria chegado ao algoritmo da inversa.

Valeu ai carinha ate mais, esse forum é muito bom mesmo. Voces são demais.