Raising a number to a huge exponent

前端 未结 2 802
野的像风
野的像风 2021-01-23 20:17

I am given the number 3 and a variable \'n\', that can be as high as 1 000 000 000 (a billion). I have to print the answer of 3^n modulo 100003. I tried the followi

2条回答
  •  无人及你
    2021-01-23 20:59

    This is to augment Kaidul's answer.

    100003 is a prime number, which immediately casts in the Fermat's Little Theorem: any number raised to a prime power is congruent to itself modulo that prime. It means that you don't need to raise to n'th power. A n % 100002 power suffices.

    Edit: example.

    Say, n is 200008, which is 100002 * 2 + 6. Now,

    3 ^ 200007 =
    3 ^ (100002 + 100002 + 6) = 
    3 ^ 100002 * 3 ^ 100002 * 3 ^ 6
    

    FLT claims that (3 ^ 100002) % 100003 == 1, and the last line above, modulo 100003, reduces to 3 ^ 6. In general, for a prime p,

    (k ^ n) % p == k ^ (n % p)
    

    Of course, it only speeds the computation if the exponent n is greater than p. As per your request (exponent 100, modulo 100003) there is nothing to reduce. Go straight to the Kaidul's approach.

提交回复
热议问题