社区讨论
不是欧拉函数+快速幂吗,为什么是90?
P1405苦恼的小明参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mi4efh5w
- 此快照首次捕获于
- 2025/11/18 17:56 4 个月前
- 此快照最后确认于
- 2025/11/18 17:56 4 个月前
CPP
# include <iostream>
# include <stdio.h>
# include <stdlib.h>
# include <string.h>
# include <math.h>
# include <algorithm>
using namespace std;
const int MODN = 10007;
const int MAXN = 1234568;
/*快速幂*/
CPPint POWER(int a,int n,int MO) {
int ret = 1, base = a;
while(n != 0) {
if(n & 1) {
ret *= base;
ret %= MO;
}
base *= base;
base %= MO;
n >>= 1;
}
return ret % MO;
}
int main() {
/*动态内存分配,节省空间*/
CPP int n,ans,*a,*p,*l;
a = new int [MAXN];
p = new int [MODN];
l = new int [MAXN];
memset (p,0,sizeof(p));
memset (l,0,sizeof(l));
/*读取*/
CPP scanf("%d",&n);
for (int i = 1;i <= n;i ++)
scanf("%d",&a[i]);
p[1] = 1;
/* 欧拉函数 */
CPP for (int i = 2;i <= MODN;i ++)
if (! p[i])
for (int j = i;j <= MODN;j += i) {
if (!p[j]) p[j]=j;
p[j]=p[j]/i*(i-1);
}
l[1] = MODN;
for (int i = 2;i <= n - 1;i ++)
l[i] = p[l[i - 1]];
/* 计算幂(使用快速幂) */
for (int i = n - 1;i >= 1;i --)
a[i] = POWER(a[i],a[i + 1],l[i]) + l[i];
printf("%d\n",a[1] % MODN);
/*删除已分配的动态内存*/
CPP delete []a;
delete []p;
delete []l;
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...