WA On #13 求调
查看原帖
WA On #13 求调
677356
syzyc楼主2025/1/21 11:26
#include <bits/stdc++.h>

using namespace std;

typedef __int128 ll;

const int maxn = 13e5 + 7;

ll read() {
	ll x = 0, f = 1; char c = getchar();
	while (c < '0' || c > '9') {if (f == '-') c = -1; c = getchar();}
	while (c >= '0' && c <= '9') {x = (x << 3) + (x << 1) + (c ^ 48); c = getchar();}
	return x * f;
}
void print(ll x) {
	if (x > 9) print(x / 10);
	putchar(x % 10 + 48);
}

int n, a[maxn];
bitset<21000> isp;
vector<int> prime;
int phi[21000];
void Euler() {
	isp.set(), isp[0] = isp[1] = 0;
	phi[1] = 1;
	for (int i = 2; i <= 20007; ++i) {
		if (isp[i]) {
			prime.push_back(i);
			phi[i] = i - 1;
		}
		for (int p : prime) {
			if (i * p > 20007) continue;
			isp[i * p] = 0;
			if (i % p == 0) {
				phi[i * p] = p * phi[i];
				break;
			}
			phi[i * p] = phi[i] * phi[p];
		}
	}
}
ll qpow(ll x, ll y, ll mod) {
	ll res = 1;
	while (y > 0) {
		if (y & 1) res = res * x % mod;
		y >>= 1, x = x * x % mod + mod;
	}
	return res;
} 
ll f(int idx, ll mod) {
	if (idx == n + 1) return 1;
	return qpow(a[idx], f(idx + 1, phi[mod]) + phi[mod], mod);
}
int main() {
	Euler();
    n = read();
    for (int i = 1; i <= n; ++i)
    	a[i] = read();
    ll ans = f(1, 10007);
    print(ans);
	return 0;
} 
2025/1/21 11:26
加载中...