-2
long long encrypt(int message,int n,int e)
{
long long s=pow(message,e);
return s%n;
}

これを試すと:

        printf("%lli",encrypt(65,3233,17));

これを出力します: -2631

誰もこれを修正する方法を知っていますか...正直に言うと、それらは今のところ小さな値です..将来的にはより大きな値を使用すると思います

4

3 に答える 3

3

おそらくこれでうまくいくでしょう:

int encrypt(int message,int n,int e)
{
    int s = 1;
    while (e--) {
        s = ( s * message ) % n;
    }
    return s;
}
于 2013-07-10T23:48:04.500 に答える
0

数学では次のような定理があります: *(a*b)%p =(a%p*b%p)%p* したがって、これを得ることができます:

*(a^e)%n=(a(e-1)%p*a%p)%p*

次のようなコードを取得できます。

int encrypt(int message,int n,int e)
{
    int result = 0;

    if(1 == e)
    {
       return message%n;
    }
    else
    {
       result = encrypt(message,n,e-1);
    }

    return (result%p * message%p)%p;

}
于 2013-07-11T02:26:16.343 に答える