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
誰もこれを修正する方法を知っていますか...正直に言うと、それらは今のところ小さな値です..将来的にはより大きな値を使用すると思います
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
誰もこれを修正する方法を知っていますか...正直に言うと、それらは今のところ小さな値です..将来的にはより大きな値を使用すると思います
おそらくこれでうまくいくでしょう:
int encrypt(int message,int n,int e)
{
int s = 1;
while (e--) {
s = ( s * message ) % n;
}
return s;
}
数学では次のような定理があります: *(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;
}