将上述算法的输入改为先输入n和p然后输入a1到an
时间: 2024-03-16 09:41:18 浏览: 15
好的,根据您的要求,修改后的代码如下:
```c
#include <stdio.h>
typedef long long ll;
ll mod_pow(ll a, ll n, ll p) {
ll ans = 1;
while (n > 0) {
if (n & 1) {
ans = (ans * a) % p;
}
a = (a * a) % p;
n >>= 1;
}
return ans;
}
int main() {
ll a[105], n, p;
int i;
printf("请输入 n:\n");
scanf("%lld", &n);
printf("请输入 p:\n");
scanf("%lld", &p);
printf("请输入 a1, a2, ..., an:\n");
for (i = 0; i < n; ++i) {
scanf("%lld", &a[i]);
}
ll ans = 1;
for (i = 0; i < n; ++i) {
ans = mod_pow(ans, a[i], p);
}
printf("((a1^a2).....)^an 模 p 的值为 %lld\n", ans);
return 0;
}
```
现在,您可以先输入 n 和 p,然后再输入 a1 到 an,来计算 ((a1^a2).....)^an 模 p 的值了。