hdu-2814-Interesting Fibonacci-斐波那契周期节
哇,其实我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-斐波那契周期节的更多相关文章
- HDU 2814 斐波那契循环节 欧拉降幂
		
一看就是欧拉降幂,问题是怎么求$fib(a^b)$,C给的那么小显然还是要找循环节.数据范围出的很那啥..unsigned long long注意用防爆的乘法 /** @Date : 2017-09- ...
 - Java Fibonacci 斐波那契亚
		
Java Fibonacci 斐波那契亚 /** * <html> * <body> * <P> Copyright 1994-2018 JasonInternat ...
 - 递归算法之Fibonacci 斐波那契数列第n个数的求解
		
Fibonacci 斐波那契数列第n个数的求解,也可以用递归和非递归的形式实现,具体如下,dart语言实现. int fibonacci(int n) { if (n <= 0) throw S ...
 - lintcode:Fibonacci 斐波纳契数列
		
题目: 斐波纳契数列 查找斐波纳契数列中第 N 个数. 所谓的斐波纳契数列是指: 前2个数是 0 和 1 . 第 i 个数是第 i-1 个数和第i-2 个数的和. 斐波纳契数列的前10个数字是: 0, ...
 - hdu number number number 斐波那契数列 思维
		
http://acm.hdu.edu.cn/showproblem.php?pid=6198 F0=0,F1=1的斐波那契数列. 给定K,问最小的不能被k个数组合而成的数是什么. 赛后才突然醒悟,只要 ...
 - hdu 4983 线段树+斐波那契数
		
http://acm.hdu.edu.cn/showproblem.php?pid=4893 三种操作: 1 k d, 修改k的为值增加d 2 l r, 查询l到r的区间和 3 l r, 从l到r区间 ...
 - 算法导论-求(Fibonacci)斐波那契数列算法对比
		
目录 1.斐波那契数列(Fibonacci)介绍 2.朴素递归算法(Naive recursive algorithm) 3.朴素递归平方算法(Naive recursive squaring) 4 ...
 - HDOJ/HDU 5686 Problem B(斐波拉契+大数~)
		
Problem Description 度熊面前有一个全是由1构成的字符串,被称为全1序列.你可以合并任意相邻的两个1,从而形成一个新的序列.对于给定的一个全1序列,请计算根据以上方法,可以构成多少种 ...
 - HDU 1568 快速求斐波那契前四位
		
思路: 把斐波那契通项公式转化成log的形式,高中数学... //By SiriusRen #include <bits/stdc++.h> using namespace std; ], ...
 - hdu 4099 字典树 + 斐波那契
		
题意: 给你一个串(最长40位)问你这个串是斐波那契F(n) n <= 99999中的那个数的前缀,如果存在多个输出最小的n否则输出-1. 思路: 给的串最长40位,那 ...
 
随机推荐
- Socket编程之聊天程序 - 模拟Fins/ModBus协议通信过程
			
设备控制软件编程涉及到的基本通信方式主要有TCP/IP与串口,用到的数据通信协议有Fins与ModBus. 更高级别的通信如.net中的Remoting与WCF在进行C/S架构软件开发时会采用. 本篇 ...
 - JSCapture实现屏幕捕捉
			
JSCapture 是用纯 JavaScript 和 HTML5 实现的屏幕捕捉库. 能够随意在浏览器或者桌面视频进行截图, JSCapture 使用 getUserMedia 来实现屏幕捕获. 当前 ...
 - CMMI 是什么东西?
			
摘要: CMMI全称是Capability Maturity Model Integration,CMMI是个好东西来的,但行内人士对她的认识并不全面,甚至有种种的误解.尽管网上有很多CMM ...
 - ASI简单实现网络编程
			
使用iOS SDK中的HTTP网络请求API,相当的复杂,调用比較麻烦.ASIHTTPRequest 对CFNetwork API进行了封装.而且使用起来非常easy的一套API,在非常多比較老旧的项 ...
 - 深刻:截获windows的消息并分析实例(DefWindowProc),以WM_NCHITTEST举例(Windows下每一个鼠标消息都是由 WM_NCHITTEST 消息产生的,这个消息的参数包含了鼠标位置的信息)
			
1,回调函数工作机制 回调函数由操作系统自动调用,回调函数的返回值当然也是返回给操作系统了. 2,截获操作系统发出的消息,截获到后,将另外一个消息返回给操作系统,已达到欺骗操作系统的目的. 下面还是以 ...
 - linux查找文件或字符串的命令
			
1. linux下面用于查到的命令有哪些? 是不是有很多呀,这个我还没做过统计和调查,不过这篇博客只介绍grep与find的最基本应用. grep和find功能都是相当的强大,这里也只是介绍这两个命令 ...
 - 事件总线帧---Otto
			
我们如果这样一种业务场景.如今在做一款及时聊天应用,我们在聊天页面进行收发信息.同一时候也要实时更新前一页面的聊天记录,这时我们该怎样去实现?说说我曾经的实现策略.我使用的是广播接收器BroadCas ...
 - C3P0
			
c3p0详细配置 官方文档 : http://www.mchange.com/projects/c3p0/index.html <c3p0-config> <default-con ...
 - 为什么国外程序员爱用苹果Mac电脑?(转)
			
Mac 在国外很受欢迎,尤其是在 设计/web开发/IT 人员圈子里.普通用户喜欢 Mac 可以理解,毕竟 Mac 设计美观,简单好用,没有病毒.那么为什么专业人士也对 Mac 情有独钟呢?从个人使用 ...
 - ubuntu linux 13.04更新
			
首先备份源列表: sudo cp /etc/apt/sources.list /etc/apt/sources.list_backup 而后用gedit或其他编辑器打开: gksu gedit /et ...