3012: Fibnacci Numbers

时间限制(普通/Java):1000MS/3000MS     内存限制:65536KByte
总提交: 199            测试通过:55

描述

The fibnacci numbers are as follows:
f[1] = 1; f[2] = 2;
f[n] = f[n - 1] + f[n - 2];
And s[n] is defined:

Now ,give you the integer number a, x and n, you should calculate the ans, and the ans is defined as follows:
ans = as[x] % n;
You must pay attention to the range of the number: 1 ≤ a ≤ 100000000; 1 ≤ x ≤ 1000000000; 2 ≤ n ≤ 100000000.

输入

The input contains several test cases. For each test case, only line contains three integer numbers a, x and n separated by spaces.
The end of the input is indicated by a line containing three zeros separated by spaces.

输出

For each test case the output is only one integer number ans in a line.

样例输入

1 1 100 2 3 1000000 0 0 0

样例输出

1 16384

题目来源

HNU Monthly 2009.12

解题思路:首先要知道

1.先用斐波那契前n项平方和公式简化一下表达式;  ans = a^(F(x)*F(x+1) - 1) % n

2.指数比较大,用降幂公式 a ^ b % c =  a^(b%phi(c) + phi(c) ) % c

3.斐波那契的项数比较多(x比较大),F(x)%phi(n)考虑矩阵快速幂取模解决

#include<map>
#include<stack>
#include<queue>
#include<vector>
#include<math.h>
#include<stdio.h>
#include<iostream>
#include<string.h>
#include<stdlib.h>
#include<algorithm>
using namespace std;
typedef long long  ll;
#define inf 1000000000
#define mod 1000000007
#define  maxn  100006
#define  lowbit(x) (x&-x)
#define  eps 1e-10
ll  a,n,x,ph;
struct node
{ll x[2][2];
}b,c;
ll ol(ll x)
{ll i,res=x;for(i=2;i*i<=x;i++){if(x%i)continue;res=res-res/i;while(x%i==0)x/=i;}if(x>1)res=res-res/x;return res;
}
node q2(node a,node b,ll MOD)
{node p;int i,j,k;for(i=0;i<2;i++)for(j=0;j<2;j++){p.x[i][j]=0;for(k=0;k<2;k++)p.x[i][j]+=a.x[i][k]*b.x[k][j];p.x[i][j]%=MOD;}return p;
}
node q1(node x,ll y,ll MOD)
{node pp=c;while(y){if(y&1)pp=q2(pp,x,MOD);x=q2(x,x,MOD);y>>=1;}return pp;
}
ll q3(ll x,ll y,ll MOD)
{ll res=1;while(y){if(y&1)res=(res*x)%MOD;x=(x*x)%MOD;y>>=1;}return res;
}
void init()
{b.x[0][0]=b.x[0][1]=1;b.x[1][0]=1;b.x[1][1]=0;c.x[0][0]=c.x[1][1]=1;c.x[0][1]=c.x[1][0]=0;
}
int  main(void)
{node ans;init();while(scanf("%lld%lld%lld",&a,&x,&n),a+x+n){ph=ol(n);ans=q1(b,x+1,ph);ll ans1=(ans.x[0][0]*ans.x[0][1]%ph+ph-1)%ph+ph;ll ans2=q3(a,ans1,n);printf("%lld\n",ans2);}return 0;
}
/*
400000 21 13
400000 400014 16384
*/

TZC 3012-Fibnacci Numbers(矩阵快速幂+降幂公式)相关推荐

  1. HDU - 5667 Sequence(矩阵快速幂+费马小定理降幂)

    题目链接:点击查看 题目大意:给出函数f(x): 现给出n,a,b,c,mod,求f(n)对mod取模后的结果 题目分析:这个题目相对于前几个题来说稍微加大了点难度,但还是挺水的一个题,首先我们可以对 ...

  2. HDU 4382 【矩阵快速幂】【欧拉降幂】

     自己的思路写的 102 × 102 大小的转化矩阵,好在线代学的还行想到用矩阵分块乘法过了- 看其他人的题解用的 3 × 3  构造一个 转化矩阵 T T T ,一个用来存储结果的 P P P  先 ...

  3. Product Oriented Recurrence(Codeforces Round #566 (Div. 2)E+矩阵快速幂+欧拉降幂)

    传送门 题目 fn=c2∗n−6fn−1fn−2fn−3\begin{aligned} &f_n=c^{2*n-6}f_{n-1}f_{n-2}f_{n-3}&\\ \end{alig ...

  4. HDU4549 M斐波那契数列(矩阵快速幂+费马小定理)

    Problem Description M斐波那契数列F[n]是一种整数数列,它的定义如下: F[0] = a F[1] = b F[n] = F[n-1] * F[n-2] ( n > 1 ) ...

  5. 湖南大学第十四届ACM程序设计新生杯(重现赛)L-The Digits String (矩阵快速幂)

    题目链接 题目描述 Consider digits strings with length n, how many different strings have the sum of digits a ...

  6. SDNU_ACM_ICPC_2020_Winter_Practice_4th [Reproduced](新知识点:矩阵快速幂的应用)

    Triangle 题意:木棒长度从1开始为1,2,3-的序列,问在一个序列中最少拿出多少木棒才能使剩下的木棒不能构成三角形. 题解:根据序列的特点以及若构成三角形则必须两边之和大于第三边想到斐波那契数 ...

  7. 矩阵快速幂2Jzzhu and Sequences Recurrences Contemplation! Algebra Reading comprehension

    来!接着写题解,立个flag:矩阵快速幂题解不写完今晚不睡觉! 此题解是接着矩阵快速幂1写的,此篇有哪里写不清楚的地方导致看不懂的可以先看1:https://blog.csdn.net/qq_4536 ...

  8. Codeforces 1106F Lunar New Year and a Recursive Sequence 矩阵快速幂,原根转化模意义下对数,BSGS

    文章目录 题意 题解 对数法转指数线性递推 原根与模意义下求对数 拔山盖世! 最终步骤 Problem Origin 狠搞了一个多星期,做出来之后仍然一知半解,写个博客重理思路. 题意 定义序列fff ...

  9. 杭电ACM-LCY算法进阶培训班-专题训练(矩阵快速幂)

    杭电ACM-LCY算法进阶培训班-专题训练(矩阵快速幂)[模板] 传送门 杭电ACM-LCY算法进阶培训班-专题训练(矩阵快速幂)[模板] 矩阵快速幂模板 Count Problem Descript ...

  10. 数论-快速幂、矩阵快速幂、慢速乘

    文章目录 快速幂 矩阵快速幂 慢速乘 例题 HDU-2817 HDU-3117 XUJC-1395 快速幂 首先幂运算 a n a^n an就是 n n n个 a a a相乘,我们可以直接调用库函数 ...

最新文章

  1. Mapreduce 任务提交源码分析1
  2. 知识图谱简史:从1950到2019
  3. matlab中的scramble函数,matlab 中 hold on 和hold off的使用
  4. Zynq7000开发系列-5(OpenCV开发环境搭建:Ubuntu、Zynq)
  5. matlab max与min获取矩阵最大最小值函数
  6. MyBatisPlus自动生成代码springboot+mybatis+mysql 以及动态sql生成方法(测试可用版)
  7. 价值199的wp移植Emlog主题模板PandaPRO
  8. 使用CImage绘制半透明图片
  9. Can't be easier
  10. 网易云部分 解析歌词
  11. 1. Packet sniffers (包嗅探器 14个)
  12. Auto.js找图找色常用功能
  13. 程序员最喜欢的15款文本编辑器推荐
  14. move是MySQL命令_MOVE命令_视频讲解_用法示例-redis编程词典-php中文网
  15. php中对数组进行转码,PHP 数组转码
  16. 如何快速通过对方微信好友验证!
  17. {魔兽编辑器学习笔记} 一 安装编辑器、创建地图
  18. Excel中日期、数字、中文大写金额等转文本
  19. Flink project java篇
  20. 邀好友赢大奖!快来抽取你的 2019 新年上上签!

热门文章

  1. ZOJ 3939 The Lucky Week
  2. nginx 二 配置conf
  3. 南邮80c51汇编语言编程实验,实验三 查表 多分支(80C51单片机汇编语言编程)
  4. 各种手段终于将土豆视频url请求找到了
  5. 千寻位置48小时“复活”伽利略卫星定位系统
  6. 计算反转录转座子插入时间二:提取成对LTRs序列
  7. 西北工业大学计算机转专业,2021年西北工业大学大一新生转专业及入学考试相关规定...
  8. js 流文件下载zip压缩包
  9. 34604-52-9,Ms-PEG3-Ms甲磺酸基是良好的离去基,也可用作伯醇的保护基
  10. 搭建gos_如何将记录器注入gos http处理程序