A X mod P(數論 打表)

2021-10-24 11:47:46 字數 2512 閱讀 5733

題目描述

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...