任意のバイト数と1バイトの間でモジュロ演算を行うCで実装されたアルゴリズムを作成する必要があります。これを参照してください:
typedef struct{
u_int8_t * data;
u_int16_t length;
}UBigInt;
u_int8_t UBigIntModuloWithUInt8(UBigInt a,u_int8_t b){
}
2の累乗の場合、a&(b-1)を使用できますが、2の累乗以外の場合はどうでしょうか。
私は1つの方法が次のとおりであることを理解しています:a --b *(a / b)
そのためには、UBigIntDivisionWithUInt8とUBigIntMultiplicationWithUInt8およびUBigIntSubtractionWithUBigIntを使用する必要があります。これを行うためのより効率的な方法があるかもしれませんか?
ありがとうございました。
これは私が今持っている実装です:
u_int8_t UBigIntModuloWithUInt8(UBigInt a,u_int8_t b){
if (!(b & (b - 1)))
return a.data[a.length - 1] & b - 1; // For powers of two this can be done
// Wasn't a power of two.
u_int16_t result = 0; // Prevents overflow in calculations
for(int x = 0; x < a.length; x++) {
result *= (256 % b);
result %= b;
result += a.data[x] % b;
result %= b;
}
return result;
}