luogu P1405 苦恼的小明(欧拉定理)

Posted xu-daxia

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了luogu P1405 苦恼的小明(欧拉定理)相关的知识,希望对你有一定的参考价值。

题意

求a1^a2^a3^...^an(mod10007)n<=1000000,a[i]<=10000

题解

明眼人一眼就可以看出是欧拉定理的推论。

首先这个题是错的,没说保证互质。

然而我背错了定理,然后就一直减一。

之后发现要求phi,求完之后一直RE,交了题解还RE、、、

 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 #include<cmath>
 5 #include<algorithm>
 6 using namespace std;
 7 const int N=5000000;
 8 int phi[N],a[N],n,ans;
 9 void get_phi(){
10     phi[1]=1;
11     for(int i=2;i<=10010;i++)
12         if(!phi[i])
13         for(int j=i;j<=10010;j+=i)
14         {
15             if(!phi[j])phi[j]=j;
16             phi[j]=phi[j]/i*(i-1);
17         }
18 }
19 int ksm(int x,int b,int md){
20     int tmp=1;
21     x%=md;
22     while(b){
23         if(b&1){
24             tmp=(tmp*x)%md;
25         }
26         b>>=1;
27         x=(x*x)%md;
28     }
29     return tmp;
30 }
31 int dfs(int x,int md){
32     if(x==n)return a[n]%md;
33     int y=dfs(x+1,phi[md]);
34     return ksm(a[x],y,md);
35 }
36 int main(){
37     scanf("%d",&n);
38     for(int i=1;i<=n;i++){
39         scanf("%d",&a[i]);
40     }
41     get_phi();
42     printf("%d",dfs(1,10007)); 
43 }

 

以上是关于luogu P1405 苦恼的小明(欧拉定理)的主要内容,如果未能解决你的问题,请参考以下文章

luogu 5091 欧拉定理

Luogu4139 上帝与集合的正确用法 拓展欧拉定理

Luogu4980 模板Polya定理(Polya定理+欧拉函数)

Luogu[P4139] 上帝与集合的正确用法(扩展欧拉定理)

P5091 模板欧拉定理

[六省联考2017]相逢是问候(扩展欧拉定理+预处理幂)