首页 > 其他 > 详细

HDU 3307 Description has only two Sentences

时间:2014-04-13 17:19:54      阅读:545      评论:0      收藏:0      [点我收藏+]

数学实在是差到不行了……

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#include <cstdio> 
#include <cstring> 
#include <algorithm> 
#include <iostream> 
#include <cmath> 
using namespace std; 
#define LL __int64 
const LL maxn=1001; 
LL e[maxn],t; 
LL gcd(LL a,LL b){return b==0?a:gcd(b,a%b);} 
LL euler_phi(LL n)//求单个欧拉函数 
    LL m=(LL)sqrt(n+0.5); 
    LL i,ans=n; 
    for(i=2;i<=m;i++) 
        if(n%i==0) 
        
            ans=ans/i*(i-1); 
            while(n%i==0)n/=i; 
        
    if(n>1)ans=ans/n*(n-1); 
    return ans; 
void find(LL n)//找出所有因子 
    LL m=(LL)sqrt(n+0.5); 
    for(LL i=1;i<m;i++) 
        if(n%i==0){e[t++]=i;e[t++]=n/i;} 
    if(m*m==n)e[t++]=m; 
LL pow_mod(LL a,LL b,LL mod)//快速幂 
    LL s=1; 
    while(b) 
    
        if(b&1) 
            s=(s*a)%mod; 
        a=(a*a)%mod; 
        b=b>>1; 
    
    return s; 
int main() 
    LL a,x,y; 
    while(cin>>x>>y>>a) 
    
        LL m,phi,i; 
        if(y==0){cout<<"1"<<endl;continue;} 
        m=a/gcd(y/(x-1),a); 
        if(gcd(m,x)!=1){cout<<"Impossible!"<<endl;continue;}//不互质,则x^k%m必定是gcd(m,x)的倍数 
        phi=euler_phi(m); 
        t=0; 
        find(phi); 
        sort(e,e+t); 
        for(i=0;i<t;i++) 
        
            if(pow_mod(x,e[i],m)==1) 
            
                cout<<e[i]<<endl; 
                break
            
        
    
    return 0; 
/*
    euler_phi(i),欧拉函数,表示求不大于i且与i互质的正整数个数。
  
    本题递推公式化简下可得到通项公式:ak=a0+Y/(X-1)*(X^k-1);后半部分是等比数列的和。
    现在求ak%a0=0,即Y/(X-1)*(X^k-1)%a0==0,令m=a0/gcd(Y/(X-1),a0),则可推到求最小的k使得
(X^k-1)%m==0,即X^k==1(mod m).
    根据欧拉定理得X^euler_phi(m)==1(mod m).(X与m互质)
    又由抽屉原理可知,X^k的余数必定是根据euler_phi(m)的某个因子为循环节循环的。
所以求出最小的因子k使得X^k%m==1,即为答案
*/ 

HDU 3307 Description has only two Sentences,布布扣,bubuko.com

HDU 3307 Description has only two Sentences

原文:http://www.cnblogs.com/forever97/p/3662169.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!