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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

nyoj676小明的求助

發布時間:2025/3/16 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 nyoj676小明的求助 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目鏈接  http://acm.nyist.net/JudgeOnline/problem.php?pid=676
題目大意:給三個數N(1~10^10),P(1~10^15),M(1~9) ,求N的P次方的后M位數字。

思路:后M位數實際上就是%(pow(10,M))。
我令M=pow(10,M) 則N^2%M=(N%M*N%M)%M,這個公式可推廣到N^P,這樣做是為了防止數據太大而溢出產生錯誤。
N%M要循環P(max P = 10^15)次,是鐵定超時的,所以用到快速求冪的知識。

AC代碼:


#include <stdio.h> #include <math.h> int main() {int t, i;scanf("%d", &t);for(i = 1; i <= t; i++) {long long N, P, M, T = 1;scanf("%lld%lld%lld", &N, &P, &M);M = ceil(pow(10.0,M+0.0));while(P>1) {//快數求冪法 N %= M;//防止數據太大N*N時產生溢出 if(P&1) {//當P為奇數時的處理 T *= N;T %= M;//防止溢出 }N *= N;//N = N*N P >>= 1;//P = P/2 }printf("Case #%d: %lld\n", i, ((N%M)*(T%M))%M);}return 0; }
與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的nyoj676小明的求助的全部內容,希望文章能夠幫你解決所遇到的問題。

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