题目描述:

求解Prime Fibonacci 数列 P 的第 N 位(即该数列中不能被别的 Fibonacci 数整除的数)。 (P1=2,P2=3,P3=5,P4=13⋯)(P_1=2, P_2=3, P_3=5, P_4=13⋯)(P1​=2,P2​=3,P3​=5,P4​=13⋯)

由于答案过大,所以答案 Pn3 mod m\frac{P_n}{3} \bmod m3Pn​​modm (题目保证gcd(3, m) = 1)

输入描述:

多组输入,每组数据输入n,mn, mn,m两个正整数(1 ≤\le≤ n ≤\le≤ 500000, 4 ≤\le≤ m ≤\le≤ 1000000000,组数不大于 50000)

输出描述:

对于每组测试数据输出Pn3 mod m\frac{P_n}{3} \bmod m3Pn​​modm
答案保留 9 位字符,不足则补 *

输入样例:

2 5

输出样例:

********1

思路

根据Prime Fibonacci数列性质:对于原始Fibonacci数列,从F(5)开始,某项为Fibonacci质数当且仅当它的项数为质数,所以初始化得到prim[]质数序列,即Prime Fibonacci数列在原始Fibonacci数列中的项数序列,从而可以得到PnP_nPn​在原始Fibonacci数列的哪一项;

然后快速Fibonacci数列的方法得到该项mod m的值,结果就是该值乘以3对于m的逆元mod m。

更多题解请关注 doubleQ2018’s GitHub

ac代码

#include <bits/stdc++.h>using namespace std;const int maxn = 7400000;
bool vis[maxn+10];
long long pri[maxn+10];
long long n, mod, ni;struct Matrix {long long ma[2][2];
};Matrix mul(Matrix A,Matrix B) {Matrix C;C.ma[0][0] = C.ma[0][1] = C.ma[1][0] = C.ma[1][1] = 0;for(int i = 0; i < 2; i++) {for(int j = 0; j < 2; j++) {for(int k = 0; k < 2; k++) {C.ma[i][j] = (C.ma[i][j] + A.ma[i][k] * B.ma[k][j]) % mod;}}}return C;
}
Matrix pow_mod(Matrix A, long long n) {Matrix B;B.ma[0][0] = B.ma[1][1] = 1;B.ma[0][1] = B.ma[1][0] = 0;while(n) {if(n & 1) B = mul(B,A);A = mul(A, A);n >>= 1;}return B;
}
long long quick_fibonacci(long long n) {Matrix A;A.ma[0][0] = 1; A.ma[0][1] = 1;A.ma[1][0] = 1; A.ma[1][1] = 0;Matrix ans = pow_mod(A, n);return ans.ma[0][1];
}long long extend_gcd(long long a, long long b, long long &x, long long &y) {if (b == 0) {x = 1, y = 0;return a;}else {long long r = extend_gcd(b, a % b, y, x);y -= x * (a / b);return r;}
}
long long inv(long long a, long long n) {long long x, y;extend_gcd(a, n, x, y);x = (x % n + n) % n;return x;
}int main() {int cur = 5;long long i, j;for(i = 2; i <= maxn; i++) vis[i] = false;for(i = 2; i <= maxn; i++) {if(!vis[i]){for(j = i*i; j <= maxn; j += i) vis[j] = 1;}}for(i = 11; i <= maxn; i++)if(vis[i] == 0) {pri[cur++] = i;}while(cin >> n >> mod){ni = inv(3, mod);long long ans;if(n == 1) ans = 2*ni%mod;else if(n == 2) ans = 3*ni%mod;else if(n == 3) ans = 5*ni%mod;else if(n == 4) ans = 13*ni%mod;else ans = quick_fibonacci(pri[n])*ni%mod;string res = to_string(ans);if(res.size() < 9) res = string(9-res.size(), '*') + res;cout << res << endl;}
}

更多题解请关注 doubleQ2018’s GitHub

小米OJ 141. 小爱密码 2.0相关推荐

  1. 小米 OJ 编程比赛 03 月常规赛 小爱密码 2.0

    Description 求第n个prime Fibonacci:Fn3(modM)\frac{F_n}{3}\pmod M3Fn​​(modM) Solution 一开始以为是整除..结果是膜意义下的 ...

  2. mi2 android 5.0 方法,小米2/2S怎么刷Android5.0 小米2/2S刷Android5.0教程【详解】

    在之前,小米MIUI团队就公布了适配小米2的Android5.0运行图片,今天终于放出了适配小米2/2S的Android5.0刷机包,下面就来看看怎么给小米2/2S刷入Android5.0吧. 我们了 ...

  3. 小爱同学app安卓版_小爱课程表3.0全新升级 课表倒入更简单所有手机能用

    11月2日,小爱同学官方宣布,小爱课程表3.0全新升级,学生党的必备神器.小米手机上可以对小爱同学说"打开课程表"直接使用小爱课程表,非小米手机可以到应用商店搜索"小爱课 ...

  4. 小米android手机密码忘了怎么解锁,小米手机锁屏密码忘了怎么办

    保护自己的隐私十分重要,保护自己手机的隐私更加重要,毕竟我们许多信息都储存在手机上.为此,通常我们会设置锁屏密码,可是万一锁屏密码忘记了怎么办呢? 如果你使用的是小米手机,忘记锁屏密码可以通过下面的方 ...

  5. 小米 android 7.0彩蛋,手把手教你小米怎么刷入安卓7.0!

    原标题:手把手教你小米怎么刷入安卓7.0! 小米3/4/Note用上原生Android 7.0,还不赶快升级?手把手教你小米怎么刷入安卓7.0! Android 7.0发布已数月,但国内仅有华为EMU ...

  6. android7 miui8,MIUI8获更新 小米旗舰手机齐升Android7.0

    原标题:MIUI8获更新 小米旗舰手机齐升Android7.0 [刷机之家]由于小米的MIUI系统是Android系统经深度定制所得, 底层代码方面有着诸多优化,所以MIUI系统底包的升级速度会比较慢 ...

  7. 小米oj #4 最长连续数列

    小米oj #4 最长连续数列 题目链接 描述 输入一个乱序的连续数列,输出其中最长连续数列长度,要求算法复杂度为 O(n) . 输入 54,55,300,12,56 输出 3 输入样例 100,4,2 ...

  8. android+8.0关热点,体验像iPhone X,小米MIX 2升级安卓8.0了!

    原标题:体验像iPhone X,小米MIX 2升级安卓8.0了! 相对于苹果iOS手机,安卓手机的系统版本升级,总体来说比较缓慢.就当下的国内市场而言,系统版本升级至Android 8.0,或Andr ...

  9. 刷原生android 8.0,怎样刷入安卓原生系统 小米古董机刷完安卓8.0健步如飞!感觉比MIUI9还快...

    原标题:小米古董机刷完安卓8.0健步如飞!感觉比MIUI9还快 小米2S算是小米手机史上的一代神机,雷布斯当年主持发布会时,更是激动说出了"小米2S性能屌爆了"的经典语句.怎样刷入 ...

最新文章

  1. 【 HihoCoder】1082 The Marshtomp has seen it all before (暴力 或 脑力)
  2. NOI2004 郁闷的出纳税——SBT应用
  3. I.MX6 Android busybox 从哪里生成的
  4. SpringMVC实现文件的上传与下载
  5. ftk学习记(对话框篇)
  6. 现在很多人都在网上找富业
  7. access_token is invalid or not latest hint
  8. 机器学习实战—朴素贝叶斯及要点注解
  9. python,可变参数
  10. java集合大家族之Map
  11. python实现人脸识别系统_python使用opencv实现人脸识别系统
  12. 按键精灵手机助手连mumu模拟器
  13. 发票识别OCR和发票扫描仪
  14. 结对项目开发(石家庄地铁乘车系统)
  15. 树莓派CM4+CM IO上手,查看DDR和eMMC容量
  16. 计算机网络验证性实验-棋歌教学网
  17. Docker Hub的使用以及配置阿里云镜像加速
  18. Android开发 ConstraintLayout布局的详解
  19. 如何让邮件变的更安全?邮箱安全中心在哪里?
  20. P5727 【深基5.例3】冰雹猜想(思路+代码详解)python实现

热门文章

  1. Sketch的文件不用MAC电脑也能打开了
  2. 树莓派和HMC5883(QMC5883)的使用方法
  3. Mybatis-plus模糊查询like
  4. Puppeteer PK 滑动验证码
  5. python open文件失败_python open打开文件失败原因及解决办法
  6. Angular6向Angular7跨越
  7. 工信部主持正义,互联网用户梦醒
  8. Dyleen朋友的时间线
  9. gmtime php 时间戳,gmtime_s_日期与时间 | Date and time_C_参考手册_非常教程
  10. 获取csgo库存饰品信息的API接口