码迷,mamicode.com
首页 > 其他好文 > 详细

BZOJ 3884 欧拉定理 无穷幂取模

时间:2016-09-20 01:28:34      阅读:115      评论:0      收藏:0      [点我收藏+]

标签:

详见PoPoQQQ的博客..

技术分享
 1  
 2 #include <iostream>
 3 #include <cstring>
 4 #include <cstdio>
 5 #include <algorithm>
 6 #define LL long long
 7 using namespace std;
 8 LL KASE,p;
 9 inline LL Get_Phi(LL x)
10 {
11     LL Ret=x;
12     for (LL i=2;i*i<=x;i++)
13         if (x%i==0)
14         {
15             Ret/=i;Ret*=(i-1);
16             while (x%i==0) x/=i;
17         }
18     if (x>1) Ret/=x,Ret*=(x-1);
19     return Ret;
20 }
21 inline LL Pow(LL Base,LL Exp,LL Mod)
22 {
23     LL Ret=1;
24     while (Exp)
25     {
26         if (Exp&1) Ret=(Ret*Base)%Mod;
27         Exp>>=1; Base=(Base*Base)%Mod; 
28     }
29     return Ret;
30 }
31 LL Solve(LL p)
32 {
33     if (p==1) return 0;
34     LL Exp=0;
35     while (!(p&1)) p>>=1,Exp++;
36     LL Phi=Get_Phi(p);
37     LL Tmp=Solve(Phi);
38     (Tmp+=Phi-Exp%Phi)%=Phi;
39     Tmp=Pow(2,Tmp,p)%p;
40     return Tmp<<Exp;
41      
42 }
43 int main()
44 {
45     scanf("%lld",&KASE);
46     for (LL Kase=1;Kase<=KASE;Kase++)
47     {
48         scanf("%lld",&p);
49         printf("%lld\n",Solve(p));
50     }
51     return 0;
52 }
C++

 

BZOJ 3884 欧拉定理 无穷幂取模

标签:

原文地址:http://www.cnblogs.com/yyjxx2010xyu/p/5887217.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!