哇塞,我竟然2A了。。。。没有1A纯粹是脑残了。。

求:F(a^b)^(F(a^b) ^ (n-1))%c 
既是求F(a^b)^(F(a^b) ^ (n-1)%phi[c]+phi[c])%c
先求x=F(a^b)%phi[c],有循环节,直接找到循环节就OK。
然后求y=F(a^b)%c,同求x,循环节。
然后问题就变成求y^(x^(n-1)%phi[c]+phi[c])
直接套两次快速幂取模就OK。

#include <iostream>
#include<stdio.h>
#include<vector>
#include<queue>
#include<stack>
#include<string.h>
#include<algorithm>
#include<math.h>
using namespace std;
#define LL unsigned __int64
#define lcm(a,b) (a*b/gcd(a,b))
//O(n)求素数,1-n的欧拉数
#define N 110000
struct math_use
{
    LL euler(LL x)
    {
        LL i, res = x;
        for (i = 2; i*i <= x; i++)
            if (x%i == 0)
            {
                res = res / i*(i - 1);
                while (x%i == 0)
                    x /= i;
            }
        if (x > 1)
            res = res / x*(x - 1);
        return res;
    }
//a^b%c
    LL q_mod(LL a,LL b,LL n)
    {
        LL ret=1;
        LL tmp=a;
        while(b)
        {
            //基数存在
            if(b&0x1) ret=ret*tmp%n;
            tmp=tmp*tmp%n;
            b>>=1;
        }
        return ret;
    }
} M;
int smod[330];
int eur[330];
LL s_mod(int mod)
{
    LL a1,a2,a3,tmp;
    a1=0;
    a2=1;
    a3=1;
    LL ans=1;
    while(a2!=0||a3!=1)
    {
        tmp=(a2+a3)%mod;
        a2=a3;
        a3=tmp;
        ans++;
    }
    return ans;
}
void init()
{
    smod[1]=1;
    eur[1]=M.euler(1);
    for(int i=2; i<=300; i++)
    {
        smod[i]=s_mod(i);
        eur[i]=M.euler(i);
    }
}
LL get_fib(int x,int mod)
{
    if(x==0)return 0;
    LL a1,a2,a3,tmp;
    a1=0;
    a2=a3=1;
    x--;
    while(x--)
    {
        tmp=(a2+a3)%mod;
        a2=a3;
        a3=tmp;
    }
    return a2;
}
LL fib(LL a,LL b,LL mod)
{
    LL ans=1;
    int yu=smod[mod];
    LL s=M.q_mod(a%yu,b,yu);
    return get_fib(s,mod);
}
int main()
{
    LL a,b,n,c;
    init();
    LL T;
    cin>>T;
    int cas=0;
    while(T--)
    {
        cas++;
        cin>>a>>b>>n>>c;
        if(c==1)
        {
            printf("Case %d: 0\n",cas);
            continue;
        }
        LL x,y;
        LL mod,mod1;
        mod=c;
        mod1=eur[c];
        x=fib(a,b,mod1);
        y=fib(a,b,mod);
        LL p=M.q_mod(x,(n-1)%eur[mod1]+eur[mod1],mod1);
        LL ans=M.q_mod(y,p+mod1,mod);
        printf("Case %d: ",cas);
        cout<<ans<<endl;
    }
    return 0;
}

hdu-2814-Interesting Fibonacci-斐波那契循环节相关推荐

  1. C++fibonacci斐波那契数列,自下而上(附完整源码)

    C++fibonacci斐波那契数列,自下而上 fibonacci斐波那契数列,自下而上算法的完整源码(定义,实现,main函数测试) fibonacci斐波那契数列,自下而上算法的完整源码(定义,实 ...

  2. java 斐波那契编程_Java实现Fibonacci(斐波那契)取余的示例代码

    Java实现Fibonacci(斐波那契)取余的示例代码 发布时间:2020-10-09 06:05:36 来源:脚本之家 阅读:78 作者:南墙 Description Fibonacci数列的递推 ...

  3. 【C语言编程】求Fibonacci(斐波那契)数列前40个数

    问题: 求Fibonacci(斐波那契)数列前40个数. 分析: 这个数列有如下特点:第1,2两个数为1,1.从第三个数开始,该数是其前面两个数之和.即该数列为1,1,2,3,5,8,13,- ,用数 ...

  4. 求Fibonacci(斐波那契)数列的的前n项

    1.Fibonacci(斐波那契)数列的定义规律:第一项a1=0,第二项a2=1,从第三项起,每一项都等于前面两项之和. 2.使用a1,a2,a3进行迭代 代码 #include using name ...

  5. fibonacci斐波那契数列详解 递归求Fn非递归求Fn求n最近的斐波那契数

    斐波那契fibonacci 斐波那契额数列即前两项F(0)和F(1)都是1,之后的每一项都是前两项相加和即F(3)=2,F(4)=3,F(5)=5; 通项公式:F(n+2)=F(n+1)+F(n). ...

  6. C++ 求Fibonacci(斐波那契数列)前n项的和

    1.题目:求Fibonacci(斐波那契数列)前n项的和,n<=20 Fibonacci数: 1 1 2 3 5 8 13 21 34 - 思路:先求出前20项的数,分别存到数组中.需要时,直接 ...

  7. 用php递归求fibonacci数列,C++_C语言求Fibonacci斐波那契数列通项问题的解法总结,一:递归实现使用 - phpStudy...

    C语言求Fibonacci斐波那契数列通项问题的解法总结 一:递归实现  使用公式f[n]=f[n-1]+f[n-2],依次递归计算,递归结束条件是f[1]=1,f[2]=1. 二:数组实现  空间复 ...

  8. day16:递归思想——Fibonacci 斐波那契数列

    一.斐波那契数列(Fibonacci sequence),又称黄金分割数列,这个数列最早是由印度数学家提出来的. 该序列的前几项是这样的:0,1,1,2,3,5,8,13,21,34,⋯ 在数学上,斐 ...

  9. hdu 4099 字典树 + 斐波那契

    题意:       给你一个串(最长40位)问你这个串是斐波那契F(n)  n <= 99999中的那个数的前缀,如果存在多个输出最小的n否则输出-1. 思路:       给的串最长40位,那 ...

  10. python编写递归函数、求斐波那契数列第n项_Python非递归算法求解Fibonacci斐波那契数列...

    斐波那契数列递归数学定义如下:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n>=2,n∈N*) Python代码: 函数f(n),输入非负整数n,返回f[n] def f(n): a, ...

最新文章

  1. python简介、安装及基本设置
  2. 微服务架构及分布式事务解决方案
  3. 【js基础】理清Object、Object.prototype、Function、Function.prototype
  4. SAP供应商编码范围
  5. python网络编程(八)
  6. 公用ip地址查询_是什么使您无法更改公用IP地址并在Internet上造成严重破坏?
  7. 艾默生变频器报警PHP,艾默生ct变频器报警ou 这个CT的变频器报警UU怎么解决?
  8. 路由器mysql密码重置密码_【验证】mysql root密码恢复
  9. Mom and Dad
  10. WebSocket使用教程 - 带完整实例--网址:https://my.oschina.net/u/1266171/blog/357488
  11. Wireshark实战分析之IP协议(四)
  12. 计算机上可以插键盘吗,电脑键盘上这些按键竟然可以这样用?
  13. 北大青鸟学java是用什么课程_来自北大青鸟参加过JAVA课程的学长建议
  14. 在线客服系统可以帮助企业解决哪些问题?
  15. python解决鸡兔同笼_python解决鸡兔同笼问题
  16. 计算机学frm,FRM金融计算器使用教程
  17. jsp汽车销售系统带前端
  18. WebDAV之葫芦儿·派盘 + PDF Expert
  19. 嵌入式系统——复杂指令集系统与精简指令集系统(CISCRISC)
  20. .resource文件如何打开

热门文章

  1. 阿兰·麦席森·图灵(Alan Mathison Turing,1912.6.23—1954.6.7)
  2. 涓滴意念--java基础
  3. hot~《国家网络安全应急预案》你知道么。
  4. 距离差分矩阵DDM算法
  5. 如果你的键盘也没有大小写和数字指示灯
  6. Linux常用命令——jed命令
  7. (附源码)计算机毕业设计SSM中小学家校通系统
  8. php 日期单数 复数,参考ROR中的单复数转换,写一个PHP的单复数转换类
  9. 杭漂5年前端感受-白驹过隙,人生如梦
  10. 「蚂蚁金服」热搜的背后:「李开复」到底是不是口误?