hdu1852 快速模冪

2021-07-03 19:00:44 字數 1120 閱讀 4627

題目大意:

給出n,k,s為2008的n次冪的所有因子和,m為s%k,求2008的m次冪%k

分析:2008 = 2^3 * 251;

故 2008 ^ n = 2 ^ 3n * 251 ^ n;

設集合c= ;

sum(c) = 2^(3n+1) - 1;

集合w = ;

sum(w) = (251^(n+1) - 1 )/250;

則所有因子和為: s = sum(c) * sum (w);

因為s太,故直接取模;

s = sum(c) * sum(w) % k;

因為 sum(w)存在除法 , 所以需要對k* 250 取模;

故 s = sum(c) * sum(w) %( k*250)  /250;

n^m % mod 的求法:

long long pow(long long n ,long long m, int mod)

n = n * n % mod ;

m >>= 1;

}return res;

}#include #include #include #include #include #include #include #include using namespace std;

#define mod 3780

long long pow(long long n ,long long m, int mod)

n = n * n % mod ;

m >>= 1;

}return res;

}int main()

{ int n , k;

while(cin >> n >> k && ( n || k))

{long long temp1 , temp2;

temp1 = pow(2 , 3 * n + 1 , k * 250) - 1;

temp2 = pow(251 , n + 1 , k * 250) - 1;

long long res = (temp1 * temp2) % (250 * k);

res /= 250 ;

res = pow(2008 , res , k);

cout << res <

hdu5690 快速模冪

題目大意 f x m 代表乙個全是由數字x 組成的m 位數字。請計算,以下式子是否成立 f x,m modk c 思路 因為有m個x,還有取模操作,所以可以快速模冪把m位的x對k取模的結果求出來,然後在和c對k取模結果比較即可。因為取模是有個除法操作 所以可以用逆元,也可以直接乘到k上面去。incl...

快速冪 快速冪取模

快速冪的思想在於快速求解高冪指數的冪運算 複雜度為o log2n 與樸素運算相比有很大的改進 接下來給出 其中有詳解 include include using namespace std typedef long long ll ll pow1 int a,int b 最常規的方法 將冪指數轉化為...

快速冪 快速冪取模

求x m 一般方法是 xm x xm 1,這樣需要做m次乘法,未免過慢。加速方法有兩種。1.基於當m為偶數時,xm x2 m 2 當m為奇數時,xm x xm 1。顯然當m為偶數時m會減半,當m為奇數時,下次就是偶數。m可以很快收斂到0.表示冪 2.將m看成二進位制串mkmk 1 m1m0,那麼xm...