uva10692-지수 순환절
a1^(a2^(a3^(...^ an)))%m의 값을 구하다
지수 순환절의 강멱 공식 a^b%mod = a^(b^phi(mod)+phi(mod))%mod를 차례로 계산하면 되고phi()는 오라 함수로 미리 처리할 수 있습니다
코드:
# include
# include
# include
# include
# include
using namespace std;
typedef long long LL;
const int maxn = 10 + 5;
const int maxm = 1e4 + 5;
char s[maxn];
int a[maxn];
int phi[maxm];
int m, n;
int fast_pow(int x, int n, int mod) {
int r = 1;
while (n) {
if (n & 1) r = (LL)r * x % mod;
x = (LL)x * x % mod;
n >>= 1;
}
return r;
}
void phi_table() {
memset(phi, 0, sizeof phi);
phi[1] = 1;
for (int i = 2; i < maxm; ++i) if (!phi[i])
for (int j = i; j < maxm; j += i) {
if (!phi[j]) phi[j] = j;
phi[j] = phi[j] / i * (i - 1);
}
}
int solve(int id, int mod) {
if (id == n - 1) return a[id] % mod;
else return fast_pow(a[id], solve(id + 1, phi[mod]) + phi[mod], mod) % mod;
}
int main(void)
{
phi_table();
int Case = 0;
while (scanf("%s", s) == 1 && strcmp(s, "#")) {
sscanf(s, "%d", &m);
scanf("%d", &n);
for (int i = 0; i < n; ++i) scanf("%d", a + i);
printf("Case #%d: %d
", ++Case, solve(0, m));
}
return 0;
}
/*
10 4 2 3 4 5
100 2 5 2
53 3 2 3 2
#
*/
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.