問題 c: a^x mod p
時間限制: 5 sec 記憶體限制: 128 mb
題目描述
it』s easy for acmer to calculate a^x mod p. now given seven integers n, a, k, a, b, m, p, and a function f(x) which defined as following.
f(x) = k, x = 1
f(x) = (a*f(x-1) + b)%m , x > 1
now, your task is to calculate
( a^(f(1)) + a^(f(2)) + a^(f(3)) + … + a^(f(n)) ) modular p.
輸入in the first line there is an integer t (1 < t <= 40), which indicates the number of test cases, and then t test cases follow. a test case contains seven integers n, a, k, a, b, m, p in one line.
1 <= n <= 10^6
0 <= a, k, a, b <= 10^9
1 <= m, p <= 10^9
輸出for each case, the output format is 「case #c: ans」.
c is the case number start from 1.
ans is the answer of this problem.
樣例輸入 copy
23 2 1 1 1 100 100
3 15 123 2 3 1000 107
樣例輸出 copy
case #1: 14
case #2: 63
乙個比較顯然的做法是直接每項快速冪,複雜度是o(n
logn
)o(nlogn)
o(nlog
n),卡常應該卡不過去,所以需要換一種做法。
怎麼優化能過呢?顯然需要去掉乙個log
loglo
g,這就需要o(n
)o(n)
o(n)
的預處理了。
我們可以預處理出 a 的1 ~ 1e5 次冪,記錄為陣列a,讓後再預處理出 a1e
5a^
a1e5
的 1 ~ 1e5 次冪,記錄為陣列b,顯然這都是o(n
)o(n)
o(n)
的。讓後考慮這樣乙個東西:xa∗
xb=x
a+
bx^a*x^b=x^
xa∗xb=
xa+b
對於每個要求的a的次冪,假如是a1e
6+
10a^
a1e6+1
0,我們可以轉換成 a1e
510∗a
10a^}*a^
a1e510
∗a10
,那麼答案就是 a[10
]∗b[
10]
a[10]*b[10]
a[10]∗
b[10
] 。也就是說對於乙個x次冪,答案就是b[x
/1e5
]∗a[
xmod
1e5]
b[x/1e5]*a[x \bmod1e5]
b[x/1e
5]∗a
[xmo
d1e5
]。還要注意一點就是f[1
]f[1]
f[1]
是不能%m的,因為這個我wa了十多發了。。
#pragma gcc optimize(2)
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define x first
#define y second
#define r (u<<1|1)
#define mid (tr[u].l+tr[u].r>>1)
#define len(u) (tr[u].r-tr[u].l+1)
#define pb push_back
#define mk make_pair
#define re register
using
namespace std;
typedef
long
long ll;
typedef pair<
int,
int> pii;
const
int n=
1000010
,inf=
0x3f3f3f3f
,l=100000
;const
double eps=
1e-6;
ll pre[n]
,f[n]
,pre2[n]
;int
main()
}printf
("%lld\n"
,ans%p);}
return0;
}/**/
第四場補題(待續)
frog jumping 水 include include include include include include include include include define ll long long define inf 0x3f3f3f3f using namespace std i...
2013第四場多校
多校第四場 6題,打得最好的一場多校。還是cjboy給力。本場比賽我基本上沒什麼貢獻,搞04一搞就是一下午。最後看了09覺得只有狀態壓縮,不知道怎麼優化。1004 圖論,強聯通分量 0 一開始推理的時候思路很清晰,但是接著就腦殘了,沒怎麼細想就直接去套樣例。以為得到了正確的解法,只是需要乙個特判。然...
暑期個人賽 第四場 A
時間限制 2000 ms 記憶體限制 65536 kb 大家都回了本部,本部生活雖然沒有巨集福天 mo 堂 gui 般的生活,但是卻有很多外賣,今天有一家飯店新開張,凡是兩個人的餐點費用之和剛好為m可以免運費,在今天一起點外賣且免運送費的兩個人,各自點的外賣 差值最小的有大驚喜。在機房的n個同學今天...