洛谷 P5091 模板 擴充套件尤拉定理

2021-10-09 17:02:58 字數 1353 閱讀 8206

擴充套件尤拉定理

本題要點:

1、m <= 10^8, 先求出m的尤拉函式 phm. 先求出 m的素因子 p1 ~ pk

phm = m * (p1 - 1) / p1 * (p2 - 1) / p2 * … * (pk - 1) / pk

2、b 是乙個大數, 不過這裡需要關注的是 b % phm 的值。所以,可以乙個數字乙個數字的讀

累加到一定數量,對 phm求模。

3、擴充套件尤拉定理:

a^b(mod m) = a^(b % phm + phm), 如果 b < phm

這裡涉及快速冪, 用long long。

#include

#include

#include

using

namespace std;

typedef

long

long ll;

const

int maxl =

2e7+

10, maxn =

1e4+10;

int prime[maxn]

, pnum;

bool vis[maxn]

;int fac[12]

, cnt;

int a, m;

ll quick_pow

(ll x, ll y, ll mod)

x =(x * x)

% mod;

y >>=1;

}return ans;

}int

remo

(int m)

return f ? x + m : x;

}void

solve()

}int mm = m;

for(

int i =

0; i < pnum && prime[i]

* prime[i]

<= m;

++i)}if

(mm >1)

fac[cnt++

]= mm;

int phm = m;

for(

int i =

0; i < cnt;

++i)

printf

("%lld\n"

,quick_pow

(a,remo

(phm)

, m));

}int

main()

/*2 7 4

*//*2*/

/*998244353 12345 98765472103312450233333333333

*//*

5333

*/

P5091 模板 尤拉定理

出題人也想寫有趣的題面,可惜並沒有能力。給你三個正整數,a,m,ba,m,b,你需要求 a b bmod mabmodm 一行三個整數,a,m,ba,m,b 乙個整數表示答案 輸入 1複製 2 7 4 輸出 1複製 2 輸入 2複製 998244353 12345 98765472103312450...

題解 P5091 模板 尤拉定理

設 1 sim n 1 中與 n 互素的 varphi n 個數 x 1,x 2,x in m 1 那麼集合 m 1 為模 n 的乙個縮系 再設 a cdot x 1,a cdot x 2,a cdot x in m 2 由於縮系的性質,集合 m 2 也為模 n 的縮系 longrightarrow...

洛谷 P5091 尤拉降冪

模板題,無背景 給你三個正整數,a,m,b你需要求 a b mod m 輸入格式 一行三個整數,a,m,b 輸出格式 乙個整數表示答案 輸入樣例 1 複製 2 7 4輸出樣例 1 複製 2輸入樣例 2 複製 998244353 12345 98765472103312450233333333333輸...