社区讨论

不是欧拉函数+快速幂吗,为什么是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;
/*快速幂*/
CPP
int 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 条回复,欢迎继续交流。

正在加载回复...