10750: 数论number
时间限制: 1 Sec 内存限制: 128 MB
提交: 81 解决: 35
[提交] [状态] [讨论版] [命题人:admin]
题目描述
给定正整数a,b,c和一个素数p,求
输入
一行,四个整数a,b,c,p(a,b,c,p≤2×109)
输出
一行,表示的值。
样例输入
复制样例数据
3 2 2 5
样例输出
1
若正整数a,p互质,则对于任意正整数b,有
代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1e6 + 100;
const ll inf = 1e18;
const int MOD = 1e9 + 7;
ll ol(ll n) {
ll ans = n;
for (int i = 2; i <= sqrt(n); i++) {
if (n % i == 0) {
ans = ans / i * (i - 1);
while (n % i == 0) n /= i;
}
}
if (n > 1) ans = ans / n * (n - 1);
return ans;
}
ll qpow(ll a, ll b, ll m) {
ll res = 1;
while (b) {
if (b & 1) res = res * a % m;
a = a * a % m;
b >>= 1;
}
return res;
}
int main() {
ll a, b, c, m;
scanf("%lld%lld%lld%lld", &a, &b, &c, &m);
ll mod = ol(m);
ll x = qpow(b, c, mod);
ll y = qpow(a, x, m);
printf("%lld\n", y);
return 0;
}