#include<stdio.h>
#include<string.h>
#include<algorithm>
#define LL __int64
using namespace std;

LL mult_mod(LL a,LL b,LL c)
{
    a%=c;
    b%=c;
    LL ret=0;
    while(b)
    {
        if(b&1){ret+=a;ret%=c;}
        a<<=1;
        if(a>=c)a%=c;
        b>>=1;
    }
    return ret;
}

LL PowerMod(LL a, LL b, LL c)
{
    
    LL ans = 1;
    LL k = a % c;
    while(b>0)    //(k*k % c)2^b %c
    {
        if(b&1)
            ans = mult_mod(ans,k,c);
        b = b>>1;
        k = mult_mod(k,k,c);
    }
    return ans;
}

LL phi(LL n)  
{  
    LL rea=n,i;  
    for(i=2;i*i<=n;i++)  
    {  
        if(n%i==0)  
        {  
            rea=rea-rea/i;  
            while(n%i==0) n/=i;  
        }  
    }  
    if(n>1)  
        rea=rea-rea/n;  
    return rea;  
}  
/*
 from acdreamer http://blog.csdn.net/acdreamers/article/details/8990803
*/
LL gcd(LL X,LL m) //X<m
{
    if(X==0){return m;}
    return gcd(m%X,X);
}

LL divs[1000005];

LL loop(LL pval,LL X,LL m)
{
    int i,size = 0;
    for(i=1;i*i<=pval;i++)
    {    
        if(pval%i==0)
        {
            divs[size++] = i;
            divs[size++] = pval/i;
        }
    }
    sort(divs,divs+size);

for(i=0;i<size;i++)
    {
        if(PowerMod(X,divs[i],m)==1)
        {
            return divs[i];    
        }
    }
}
int main()
{
    LL X,Y,m,c,val,r;
    while(scanf("%I64d%I64d%I64d",&X,&Y,&m)!=EOF)
    {
        c = Y/(X-1);
        if(c % m==0){printf("1\n");continue;}

if(c>m)
        {
            m = m / gcd(m,c);
        }
        else
        {
            m = m / gcd(c,m);
        }

if(X<m)
        {
            if(gcd(X,m)!=1){printf("Impossible!\n");continue;}
        }
        else
        {
            if(gcd(m,X)!=1){printf("Impossible!\n");continue;}
        }

val = phi(m);
        r = loop(val,X,m);
        printf("%I64d\n",r);
    }
}
/*
c * ( X^k -1 ) mod a  ->  X^k - 1 mod a/gcd(c,m) ;
*/

hdu 3307 简单的指数循环节的更多相关文章

  1. UVA 10692 Huge Mods(指数循环节)

    指数循环节,由于a ^x = a ^(x % m + phi(m)) (mod m)仅在x >= phi(m)时成立,故应注意要判断 //by:Gavin http://www.cnblogs. ...

  2. FZU 1759 Super A^B mod C 指数循环节

    Problem 1759 Super A^B mod C Time Limit: 1000 mSec    Memory Limit : 32768 KB  Problem Description G ...

  3. "红色病毒"问题 HDU 2065 递推+找循环节

    题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=2065 递推类题目, 可以考虑用数学方法来做, 但是明显也可以有递推思维来理解. 递推的话基本就是状态 ...

  4. hdu 4291(矩阵+暴力求循环节)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4291 思路:首先保留求出循环节,然后就是矩阵求幂了. #include<iostream> ...

  5. HDU 5451——递推式&&循环节

    题意 设 $y = (5+2\sqrt 6)^{1+2^x}$,给出 $x, M$($0\leq x \leq 2^{32}, M \leq 46337$),求 $[y]\%M$. 分析 由通项推递推 ...

  6. hdu 1005 Number Sequence(循环节)

    题意,f(1)=1,f(2)=1,f(n)=a*f(n-1)+b*f(n-2),求f(n)%7 这个题可能数据不够严谨,所以有些错误的做法也可以通过,比如7 7 50,应该输出0而不是1 解:找到关键 ...

  7. HDU - 5728:PowMod (欧拉函数&指数循环节)

    Declare: k=∑ m i=1 φ(i∗n) mod 1000000007 k=∑i=1mφ(i∗n) mod 1000000007 n n is a square-free number. φ ...

  8. 【转】【关于 A^x = A^(x % Phi(C) + Phi(C)) (mod C) 的若干证明】【指数循环节】

    [关于 A^x = A^(x % Phi(C) + Phi(C)) (mod C) 的若干证明][指数循环节] 原文地址:http://hi.baidu.com/aekdycoin/item/e493 ...

  9. hdu 3746 Cyclic Nacklace KMP循环节

    Cyclic Nacklace 题意:给一个长度为Len( 3 <= Len <= 100000 )的英文串,问你在字符串后面最少添加几个字符可以使得添加后的串为周期串? Sample I ...

随机推荐

  1. Git积累

    1.使用git config命令进行配置(此配置为全局配置,这些是在提交commit时的签名): $ git config --global user.name "填写github的用户名& ...

  2. Android studio Error occurred during initialization of VM 问题解决

    最近开发导入其他Android项目遇见的问题,如下图: 解决办法: 将org.gradle.jvmargs=的值该为521(堆内存分配过高导致) 备忘,希望能帮助到大家

  3. ASN.1编码方式详解

    ASN ASN.1 – Abstract Syntax Notation dot one,抽象记法1.数字1被ISO加在ASN的后边,是为了保持ASN的开放性,可以让以后功能更加强大的ASN被命名为A ...

  4. Cinema 4D* 中令人惊叹的体积效果

    原文链接 第一部分 第二部分 云.雾.星云.火状结构等体积效果是 3D 美术师日常工作中的常见任务.借助 Turbulence FD* 或 X-Particles* 等当代第三方插件进行流体或粒子模拟 ...

  5. 【翻译】HOG, Histogram of Oriented Gradients / 方向梯度直方图 介绍

    本文翻译自 SATYA MALLICK 的 "Histogram of Oriented Gradients" 原文链接: https://www.learnopencv.com/ ...

  6. CHAPTER 19 Ordering the World 第19章 分类世界

    CHAPTER 19 Ordering the World 第19章 分类世界 Our planet is home to a bewildering variety of plants and an ...

  7. OLAP和OLTP的区别

    OLAP(On-Line Analytical Processing)联机分析处理,也称为面向交易的处理过程,其基本特征是前台接收的用户数据可以立即传送到计算中心进行处理,并在很短的时间内给出处理结果 ...

  8. pkill命令详解

    基础命令学习目录首页 原文链接:http://www.mamicode.com/info-detail-2315063.html 一:含义: 是ps命令和kill命令的结合,按照进程名来杀死指定进程, ...

  9. PSP Daily软件beta版本——基于spec评论

    题目要求: 每个小组评论其他小组beta发布作品的软件功能说明书. 试用(并截图)所有其他小组的beta作品,与软件功能说明书对比,评论beta作品对软件功能说明书的实现. 根据软件功能说明书,测试所 ...

  10. Microsoft Visual Studio 2013 的安装及单元测试

    题目:练习教科书第22~25页单元测试练习,要求自行安装Visual Studio开发平台,版本至少在2010以上,要求把程序安装过程和练习过程写到博客上,越详细越好,要图文并茂. 安装过程: 1.下 ...