pid=2814">点击此处就可以传送 hdu 2814

题目大意:就是给你两个函数,一个是F(n) = F(n-1) + F(n-2),

F(0) = 0, F(1) = 1;

还有一个是 G(n) = G(n-1)^F(a^b);

G(1) = F(a^b);

求G(n) % c;

范围:A, B, N, C (10<=A, B<2^64, 2<=N<2^64, 1<=C<=300)

注意了:c的范围是1<= C <= 300,所以说它一定会有循环 节:

解题思路: 首先算G(1) = F(a^b),设a^b的循环节是len;

F(a^b)%c = F(a^b%len)%c;

一边加一边取余

然后算G(n)%c = F(a^b)^(F(a^b)^(n-1)) % c;

G(n)%c = F(a^b)^(F(a^b)^(n-1)%phi(c)+phi(c))%c;

F(a^b)^(n-1)%phi(c)+phi(c) == (F(a^b)%phi(c)^(n-1))+phi(c)

F(a^b)%phi(c) 有循环节。同上,详细详见代码

上代码:

/*
2015 - 8 - 16 下午
Author: ITAK

今日的我要超越昨日的我,明日的我要胜过今日的我,
以创作出更好的代码为目标,不断地超越自己。

*/
#include <iostream>
#include <cstdio>

using namespace std;

//高速幂取余
int quick_mod(int a, unsigned long long b, int c)
{
int ans = 1;
a %= c;
while(b)
{
if(b & 1)
ans = (ans*a) % c;
b >>= 1;
a = (a*a) % c;
}
return ans;
}
//欧拉函数
int Phi(int m)
{
int ans = m;
for(int i=2; i*i<=m; i++)
{
if(m%i == 0)
ans -= ans/i;
while(m%i == 0)
m /= i;
}
if(m > 1)
ans -= ans/m;
return ans;
}
//公式:x^y % c == x^(y%phi(c)+phi(c))%c;
int data[90005],data1[90005];
int main()
{
//注意不要用long long,用unsigned long long
unsigned long long a, b, n;
int c, c1, t, n1, n2, tmp;
int g[10], len=0, len_c=0, len_e=0;
scanf("%d",&t);
for(int k=1; k<=t; k++)
{
//cin>>a>>b>>n>>c;
scanf("%lld%lld%lld%d",&a,&b,&n,&c);
if(c == 1)
{
printf("Case %d: 0\n",k);
continue;
}
data[0]=0, data[1]=1;
data1[0]=0, data1[1]=1;
for(int i=2; i<90005; i++)
{
data[i] = (data[i-1]+data[i-2])%c;
if(data[i]==1 && data[i-1]==0)
{
len = i-1;//c的循环节
break;
}
}
c1 = Phi(c);
if(c1 > 1)
{
for(int i=2; i<90005; i++)
{
data1[i] = (data1[i-1]+data1[i-2])%c1;

posted @
2017-05-07 12:07 
lytwajue 
阅读(...) 
评论(...) 
编辑 
收藏

hdu 2814 Interesting Fibonacci的更多相关文章

  1. Interesting Fibonacci(hdu 2814)

    Interesting Fibonacci Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Ot ...

  2. hdu Interesting Fibonacci

    Interesting Fibonacci Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Ot ...

  3. hdu 5895 广义Fibonacci数列

    Mathematician QSC Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Othe ...

  4. HDU 2814 斐波那契循环节 欧拉降幂

    一看就是欧拉降幂,问题是怎么求$fib(a^b)$,C给的那么小显然还是要找循环节.数据范围出的很那啥..unsigned long long注意用防爆的乘法 /** @Date : 2017-09- ...

  5. hdu 3304 Interesting Yang Yui Triangle

    hdu 3304 Interesting Yang Yui Triangle 题意: 给出P,N,问第N行的斐波那契数模P不等于0的有多少个? 限制: P < 1000,N <= 10^9 ...

  6. HDU 1588 Gauss Fibonacci(矩阵高速幂+二分等比序列求和)

    HDU 1588 Gauss Fibonacci(矩阵高速幂+二分等比序列求和) ACM 题目地址:HDU 1588 Gauss Fibonacci 题意:  g(i)=k*i+b;i为变量.  给出 ...

  7. hdu 2426 Interesting Housing Problem 最大权匹配KM算法

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2426 For any school, it is hard to find a feasible ac ...

  8. 【HDU 2855】 Fibonacci Check-up (矩阵乘法)

    Fibonacci Check-up Problem Description Every ALPC has his own alpc-number just like alpc12, alpc55, ...

  9. hdu 2516(Fibonacci博弈博弈)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2516 Problem Description 1堆石子有n个,两人轮流取.先取者第1次可以取任意多个, ...

随机推荐

  1. 第一个nodejs爬虫:爬取豆瓣电影图片

    第一个nodejs爬虫:爬取豆瓣电影图片存入本地: 首先在命令行下 npm install request cheerio express -save; 代码: var http = require( ...

  2. cocoaPod的Podfile文件的创建和内容格式

    Podfile创建: 1.终端中,cd到项目总目录(cd +路径名) cd/........./......../...../项目名 2.终端中继续建立Podfile(配置文件) touch Podf ...

  3. Docker学习之Docker Registry

    前言 前面已经学习了怎样通过Dockerfile来构建我们自己的镜像了,但是一个系统可能包含着很多个微服务即有很多个镜像,当镜像越来越多的时候,就必须得有一个地方来管理这些镜像,Docker官方提供了 ...

  4. 很好用的取代 PuTTY 的SSH远程登陆软件 Termius

    一直以来, 我都是用 PuTTY 一个窗口一个窗口来监视我所有的远程服务器. putty-connections-on-a-screen 总感觉非常的不方便, 特别是当远程链接断开需要再重新打开PUT ...

  5. 2014ACM-ICPC 北京赛区总结

    万万没想到,拿金了.区域赛的金是一直想拿但是一直觉得自己可能拿不到的,最后居然拿到了,开心之余感触颇深. 还记得西安打铁之后的那个晚上,心里想着铁都打了,可能就没有第二场了,但后来冼老师问我们原本我们 ...

  6. hdu 1492(约数的个数)

    The number of divisors(约数) about Humble Numbers Time Limit: 2000/1000 MS (Java/Others)    Memory Lim ...

  7. MAX() OVER() 函数

    SELECT T1.FRAMENO, T1.UNDERTAKER10,T1.STATUSCODEDATE10, MAX(T1.STATUSCODEDATE10) OVER(PARTITION BY T ...

  8. AC日记——集合位置 洛谷 P1491

    集合位置 思路: 次短路: 先走一遍最短路: 记录最短路径,然后依次删边走最短路: 最短的长度就是次短路: 来,上代码: #include <queue> #include <cma ...

  9. 8大排序算法的java实现--做个人收藏

    排序算法分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因为数据量太大,一次不能容纳全部的排序记录,在排序过程中需要访问外存.这里只讨论内部排序,常见的内部排序算法有:插入排序 ...

  10. HRBUST 1211 火车上的人数【数论解方程/模拟之枚举+递推】

    火车从始发站(称为第1站)开出,在始发站上车的人数为a,然后到达第2站,在第2站有人上.下车,但上.下车的人数相同,因此在第2站开出时(即在到达第3站之前)车上的人数保持为a人.从第3站起(包括第3站 ...