日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Leading and Trailing(数论题)

發(fā)布時間:2025/3/19 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Leading and Trailing(数论题) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題意
給出兩個數n和k
求出 的前三位和后三位

思路:
先考慮 的后三位我,們在求后三位的時候,只需要快速冪計算 并且對100取模即可
再來考慮前三位任何一個數都能寫成nk=10x?10y其中x為整數部分、y為小數部分那我們考慮x和y分別是什么含義10的x整數次冪就是1后面0的個數,相當于存著的長度部分,10y=nk10x就相當于存著的數值部分換句話說nk總共x+1位,10x?10y是nk的前x+1項,那么我們求nk的前3項只需要求102?10y即可再來考慮 前三位\\ 任何一個數都能寫成 n^k=10^{x}*10^y \\ 其中 x為整數部分、 y為小數部分\\ 那我們考慮x 和y 分別是什么含義 \\ 10的x整數次冪就是1后面0的個數, 相當于存著 的長度部分,\\ 10^y= \frac{n^k}{10^x} 就相當于存著 的數值部分\\ 換句話說 n^k總共x+1 位,10^x * 10^y 是n^k 的前x+1 項,\\ 那么我們求n^k 的前3項只需要求10^2*10^y 即可nk=10x?10yx、yxy10x1010y=10xnk?nkx+110x?10ynkx+1nk3102?10y

算法:那么我們要如何求呢
nk很大不可能直接對其求,那么我們由lg?n=x+y所以nk=10(x+y)k=10kx+ky所以對上邊的(x+y)?k就得到了(這里可能有的人轉不過來來,要明確我們找的就是k(x+y),前邊求出了x+y,那么乘k就可以了不過我們想要的是y那么只需要k(x+y)?[k(x+y]就好[]是下取整。n^k 很大不可能直接對其求,那么我們由\\ \lg n = x+y 所以\\ n^k=10^{(x+y)^k=10^{kx+ky}}\\所以對上邊的 (x+y)*k 就得到了\\(這里可能有的人轉不過來來,要明確我們找的就是k(x+y),\\前邊求出了x+y,那么乘k就可以了\\不過我們想要的是 y\\那么只需要 k (x+y) - [ k(x+y] 就好 [ ]是下取整。 nklgn=x+ynk=10(x+y)k=10kx+ky(x+y)?kkx+y),x+y,kyk(x+y)?[k(x+y][]

AC 代碼:

#include<cstdio> #include<iostream> #include<cstring> #include<algorithm> #include<cmath> #include<vector> #include<string> #include<queue> #include<map> #include<set> #include<ctime> using namespace std; typedef long long ll; #define INF 0x3f3f3f3f #define max 2000 #define mod 1000ll pow_mod(ll a, ll i) //快速冪 {if (i == 0) //遞歸終止條件return 1 % mod;ll temp = pow_mod(a, i >> 1);temp = temp * temp % mod;if (i & 1) //是奇數temp = (ll)temp * a % mod;return temp; }int main() {ll t;while (cin >> t){for (ll i = 1; i <= t; ++i){ll n,k;cin >> n>>k;ll after = pow_mod(n, k); //后三位ll count = 0, temp = n;double ret = log10(n*1.0); //求對數 *1.0 確保精度ret *= (double)k;ret = ret - (int)ret; //取整數部分//cout << ret << endl;cout << "Case " << i << ": " << (int)((pow(10, ret)) * 100) << " ";printf("%03lld\n", after);}}return 0; }

快速冪可以參考該文章:
快速冪

總結

以上是生活随笔為你收集整理的Leading and Trailing(数论题)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。