題目描述
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.
樣例輸入
232
111100
1003
1512323
1000
107
樣例輸出case #1:14
case #2
:63
思路
設 f(x) = m = k * e + z ;
a ^ f(x) = a ^ m = a ^ ( k * e + z )。即:m = k * e + z,e = m / k , z = m % k。(這裡m範圍是到1e9,這個 k 可以取1e5 )
a ^ f(x) mod p = a ^ ( 1e5 * e + z ) mod p = ( a ^ ( 1e5 * e ) * a ^ z ) mod p = (a ^ ( 1e5 * e ) mod p * ( a ^ z ) mod p ) mod p
分別用兩個陣列 fe [ e ] 和 fz [ z ] 來記錄a ^ ( k * e ) mod p 和 a ^ z mod p,則又可得到:
a ^ f(x) = ( fe [ e ] * fz [ z ] ) mod p。
這裡 e = f(x) / 1e5 , z = f(x) % 1e5
求出這兩個陣列,答案也就好求了(記得開long long)
求陣列的過程還是看**吧/(ㄒoㄒ)/~~
**
#include
#include
#include
#include
//#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define x first
#define y second
#define best 131
#define inf 0x3f3f3f3f
#define ls p<<1
#define rs p<<1|1
using
namespace std;
typedef
long
long ll;
typedef
unsigned
long
long ull;
const
double eps=
1e-5
;const
double pai=
acos(-
1.0)
;const
int n=
1e5;
const
int maxn=
1e6+10;
ll t,n,a,k,a,b,m,p,fe[maxn]
,fz[maxn]
,f[maxn]
,tot;
void
init()
for(
int i=
1;i<=n;i++)}
intmain()
for(
int i=
1;i<=n;i++
)printf
("case #%lld: %lld\n"
,++tot,ans);}
return0;
}
(唉,感覺題目好難啊,補題補的感覺自己要炸了/(ㄒoㄒ)/~~,菜是原罪,還得加油啊!!!) 旅行 數論 打表找規律
傳送門 題意 轉眼畢業了,曾經朝夕相處的同學們不得不都各奔東西,大家都去了不同的城市開始新的生活。在各自城市居住了一段時間後,他們都感到了一些厭倦,想去看看其他人的生活究竟如何,於是他們都選擇到另乙個同學所在城市去旅遊,並且希望旅遊的城市各不相同,他們想知道有多少種不同的方案,可是數量實在太多了,他...
洛谷 2158 數論 打表 尤拉函式
傳送門 其實看到sdoi就有一種不太好的預感,想當年那個豬國殺,呵呵,用二維陣列維護每個點能否被選擇,之後二維列舉每個點,如果沒有被選擇就選擇,並且用它去遮擋其他所有點 include include include const int maxn 1000 10 int a maxn maxn in...
洛谷 2158 數論 打表 尤拉函式
洛谷 2158 數論 遞推 尤拉函式 打表找規律 傳送門 其實看到sdoi就有一種不太好的預感,想當年那個豬國殺,呵呵,用二維陣列維護每個點能否被選擇,之後二維列舉每個點,如果沒有被選擇就選擇,並且用它去遮擋其他所有點 include include include const int maxn 1...