求和(一道在mod上面打表的題)

2021-08-08 03:22:36 字數 1085 閱讀 1584

【問題描述】

計算 1^b+2^b+…+a^b 的和除以 10000 的餘數;

【輸入格式】

第一行乙個整數n,表示有n組測試資料;

接下來n行,每行包含兩個正整數a和b。

【輸出格式】

n行,對應輸入的答案

【輸入樣例】

1 2 3

【輸出樣例】

【資料範圍】

30%的資料滿足:1<=n<=10,a,b<=1000

100%的資料滿足:1<=n<=100,a,b<=1000000000

這道題看起來應該會用到快速冪,然後想起了等差數列求和的分治,事實證明它們並不能共通

雖說這道題的mod看起來覺得怪怪的,但是並沒有什麼想法,然後去網上搜了題解才發現這就是在mod上面打表的一道題,以前在有些地方看到別人用mod迴圈,心裡很不解,今天終於遇到了(^~^),我覺得可能還是因為我刷題少

我們分析之後就會發現a^b和(a+mod)^b對答案的影響是一樣的,證明是顯然的

所以說我們對於任意i^b都可以寫成(i%mod)^b,那麼只需要把mod打表打下來就可以一次計算完了,打表的時候用倍增快速冪即可

#include

#include

#include

using namespace std;

const int mod=10000;

int t,a,b;

int qkpow(int a,int p)

return ret;

}int work()

return ret;

}int main()

return

0;}

注意:

1、這裡最好從1->mod而不是0->mod-1,不然的話0會被多算一次(a%mod!=0的時候),不過事實並不影響,因為它是0,有時候記得推敲就行了

2、這裡任何地方都不需要ll,work()中x*qkpow()<=a/mod*mod,a在int之內,因此不會溢位

題型總結

對於這種mod比較小的題目就可以考慮是否乙個數%mod和是這個數的貢獻程度相同,如果是,就可以考慮在mod上面打表

華為的一道題

看了別人的解法沒有看懂,自己寫的 int a nsize 其中隱藏著若干0,其餘非0整數,寫乙個函式int func int a,int nsize 使a把0移至後面,非0整數移至 陣列前面並保持有序,返回值為原資料中第乙個元素為0的下標。盡可能不使用輔助空間且考慮效率及異常問題,注釋規範且給出設計...

一道簡單的題

阿里巴巴的一道面試題 25.給定乙個整數陣列和乙個整數,返回兩個陣列的索引,這兩個索引指向的數字的加和等於指定的整數。需要最優的演算法,分析演算法的空間和時間複雜度。include include using namespace std struct stwoindex 初始化,同時等於0,說明不存...

在論壇上回答的一道演算法題

php選猴子大王問題 山上有m只猴子要選大王,選舉辦法如下 所有猴子從1到m進行編號並圍坐一圈 從第一號開始按順序1,2 m 繼續報數 凡是報n號的猴子都退出到圈外 照此迴圈報數 直到圈內只剩下乙隻猴子時 這只猴子就是大王 輸出大王的編號。語言不限。author 楊宇 m 10 n 3 for i ...