給你兩個數(n,
k)
(n,k)
(n,k),(2≤
n≤231
)\left( 2\leq n\leq 2^\right)
(2≤n≤2
31),(1≤
k≤10
7)
\left( 1\leq k\leq 10^\right)
(1≤k≤1
07)讓你求nkn^
nk的前三位數和後三位數
n kn^
nk的後三位數很好求,直接快速冪然後對1000取模即可,
它的前三位數就要算一下
首先用科學計數法表示數,如123465789
=1.23456789⋅1
08
123465789=1.23456789\cdot 10^
123465
789=
1.23
4567
89⋅1
08那麼n k=
x⋅10
len−
1n^=x\cdot 10^
nk=x⋅1
0len
−1,其中len
lenle
n是nk
n^nk
的位數,即len
=lg(
nk
)len=\lg \left( n^\right)
len=lg(
nk)∴le
n=k⋅
lg(n
)\therefore len=k\cdot \lg \left( n\right)
∴len=k
⋅lg(n
)對這個式子nk=
x⋅10
len−
1n^=x\cdot 10^
nk=x⋅1
0len
−1兩邊取對數得到
k ⋅lg
(n)
=lg(
x)+(
len+
1)
k\cdot \lg \left( n\right)=\lg \left(x\right)+\left( len+1\right)
k⋅lg(n)
=lg(x
)+(l
en+1
)這樣就可以解出x
n kn^
nk的前三位就是x的前三位
#include
#include
#include
using
namespace std;
typedef
long
long ll;
#define wfor(i,j,k) for(i=j;i#define mfor(i,j,k) for(i=j;i>=k;--i)
// void read(int &x)
ll ksm
(ll a, ll b, ll mod)
return ans;
}int
main()
return0;
}
LightOJ 1282 求n k的前三位和後三位
you are given two integers nandk,your task is to find the most significant three digits,and least significant three digits ofnk.input input starts wit...
麥森數 高精度 快速冪
快速冪模板 求a b int ans 1 while b 0 printf d n ans 高精度乘高精度模板 void cheng int a,int b c 0 a 0 b 0 for int i 0 i10 while c k 0 c 0 如下 include include includeu...
Floyd 限制路徑步數(快速冪優化)
最短路可以採用floyd來計算,但是限制時間在1s內,估計直接寫會超時,所以要用到快速冪來優化。快速冪的思想是 xy xy 2 2 xy xy 2 2所以每次劃分下去尋找最短路 其實我也沒完全想清楚,就不講太清楚了,怕講錯 status c ac 125ms 1204kb include inclu...