題目大意:
給出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...