擴充套件尤拉定理
本題要點:
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輸...