查找非常大的 2^n 数字的最后一位
Finding the last digit of a very large 2^n number
正如标题所说,我想找到一个 2^n 数字的最后一位。
我知道这是关于重复偶数,但我不知道如何实现它。
这是我做的:
return (2*ascii%10)%10 - 2;
但这不是正确的方法
例如:
我得到了 2^97,找到这个非常大的数字的最后一位。
谢谢!
2 的幂:
2, 4, 8, 16, 32, 64, 128, 256...
最后一位数字:
2, 4, 8, 6, 2, 4, 8, 6...
2^i 的最后一位是:
int arr[4] = {2, 4, 8, 6};
return arr[(i-1)%4];
假设 ld(x) 表示 x 的最后一位。我们得到了:
ld( pow( 2, 1 ) ) = 2
ld( pow( 2, 2 ) ) = 4
ld( pow( 2, 3 ) ) = 8
ld( pow( 2, 4 ) ) = 6
ld( pow( 2, 5 ) ) = 2
看到这里的规律了吗?有一个:如果指数等于:
(4 的倍数)+ 1 你得到 ld(x) == 2
(4 的倍数)+ 2 你得到 ld(x) == 4
(4 的倍数)+ 3 你得到 ld(x) == 8
(4 的倍数)+ 0 你得到 ld(x) == 6
在 C/C++ 中你可以这样做:
int lastDigit;
if ( exp == 0 )
lastDigit = 1; // special case
int rem = exp % 4;
switch ( rem )
{
case 1: lastDigit = 2;break;
case 2: lastDigit = 4;break;
case 3: lastDigit = 8;break;
case 0: lastDigit = 6;break;
}
正如标题所说,我想找到一个 2^n 数字的最后一位。
我知道这是关于重复偶数,但我不知道如何实现它。
这是我做的:
return (2*ascii%10)%10 - 2;
但这不是正确的方法
例如:
我得到了 2^97,找到这个非常大的数字的最后一位。 谢谢!
2 的幂:
2, 4, 8, 16, 32, 64, 128, 256...
最后一位数字:
2, 4, 8, 6, 2, 4, 8, 6...
2^i 的最后一位是:
int arr[4] = {2, 4, 8, 6};
return arr[(i-1)%4];
假设 ld(x) 表示 x 的最后一位。我们得到了:
ld( pow( 2, 1 ) ) = 2
ld( pow( 2, 2 ) ) = 4
ld( pow( 2, 3 ) ) = 8
ld( pow( 2, 4 ) ) = 6
ld( pow( 2, 5 ) ) = 2
看到这里的规律了吗?有一个:如果指数等于:
(4 的倍数)+ 1 你得到 ld(x) == 2
(4 的倍数)+ 2 你得到 ld(x) == 4
(4 的倍数)+ 3 你得到 ld(x) == 8
(4 的倍数)+ 0 你得到 ld(x) == 6
在 C/C++ 中你可以这样做:
int lastDigit;
if ( exp == 0 )
lastDigit = 1; // special case
int rem = exp % 4;
switch ( rem )
{
case 1: lastDigit = 2;break;
case 2: lastDigit = 4;break;
case 3: lastDigit = 8;break;
case 0: lastDigit = 6;break;
}