我需要創建一個在C中實現的算法,可以在任意數量的字節和一個字節之間進行模運算。看到這一點:帶字節數組和8位整數的模算法:8位=字節%8位
typedef struct{
u_int8_t * data;
u_int16_t length;
}UBigInt;
u_int8_t UBigIntModuloWithUInt8(UBigInt a,u_int8_t b){
}
對於兩個大國一個&(B-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;
}
你說'a'是任意字節數;如果你有什麼話可以說b?它是不變的?如果是的話有什麼價值 – violet313
我想'b'是一個任意的8位(無符號?)整數。 –
b可能是1-255。我需要執行它58,但可能會有更多的情況。如果有58個專門優化的解決方案,那麼這將是很好的,但我可能需要爲任何實現它。 –