题目链接:https://nanti.jisuanke.com/t/41355

解题思路:其实这道题思路很简单,就是求出每一次的n1带进去算出F(n1),然后n2就是n1 xor F(n1)2,关键在于时间限制是1000ms;

本题采用 二次剩余定理+求逆元+光速幂

利用二次剩余定理+求逆元 可以将该方程转化为 f(n)=559329360(262199973n-736044383n)%998244353

转化过程采用暴力求 二次剩余和逆元

 1 //暴力求二次剩余
 2 #include <bits/stdc++.h>
 3 using namespace std;
 4 const int p=998244353;
 5 int main(int argc, char const *argv[])
 6 {
 7     for (long long i = 2; i < 10000000000; ++i)
 8     {
 9         if ((i*i-17)%p==0)
10         {
11             cout<<i<<endl;
12         }
13     }
14     return 0;
15 }

这里我们采用524399943(感觉随便用一个就行),暴力求逆元

 1 //暴力求524399943的逆元
 2 #include <bits/stdc++.h>
 3 using namespace std;
 4 const int p=998244353;
 5 int main(int argc, char const *argv[])
 6 {
 7     for (long long i = 2; i < 10000000000; ++i)
 8     {
 9         if ((i*524399943-1)%p==0)
10         {
11             cout<<i<<endl;
12         }
13     }
14     return 0;
15 }

这样便得到了559329360,同理,接下来根据求余的运算规则处理剩下的部分,最后得到方程f(n)=559329360(262199973n-736044383n)%998244353

接下来使用光速幂算法,便可以解出此题,关于光速幂的讲解网上有很多很详细的讲解,这里就不在复述了,代码如下:

 1 #include <bits/stdc++.h>
 2 #define RG register
 3 #define ll long long
 4 using namespace std;
 5
 6
 7 const int N=5e4;//循环结
 8 const ll p=998244353;
 9 const ll k1=262199973;
10 const ll k2=736044383;
11 const ll a=559329360;
12
13 ll f1[N+11];
14 ll f1x[N+11];
15 ll f2[N+11];
16 ll f2x[N+11];
17
18 void init ()
19 {
20     f1[0]=1;
21     f1x[0]=1;
22     f2[0]=1;
23     f2x[0]=1;//why?
24     for (RG int i = 1; i <= N; ++i)
25     {
26         f1[i]=(f1[i-1]*k1)%p;
27         f2[i]=(f2[i-1]*k2)%p;
28     }
29     for (RG int i = 1; i <= N; ++i)
30     {
31         f1x[i]=((f1x[i-1]%p)*(f1[N]%p))%p;
32         f2x[i]=((f2x[i-1]%p)*(f2[N]%p))%p;
33     }
34 }
35 int main(int argc, char const *argv[])
36 {
37     init();
38     int n;
39     long long ans=0,fn,m1;
40     scanf("%d%lld",&n,&m1);
41     while(n--)
42     {
43         if (m1==0) break;
44         long long m=m1;
45         if (m>=p-1) m=m%(p-1)+(p-1);
46
47         fn=((f1x[m/N]*f1[m%N])%p-(f2x[m/N]*f2[m%N])%p);
48
49         fn=(fn%p+p)%p;
50
51         fn=((fn%p)*(a%p))%p;
52
53         ans^=fn;
54         m1=m1^(fn*fn);
55
56     }
57     printf("%lld\n",ans);
58     return 0;
59 }

相关题目练习:https://www.luogu.org/problem/P5110

光速幂练习:https://www.csdn.net/link?target_url=https%3A%2F%2Fwww.luogu.org%2Fproblem%2FP1226&id=100174163&token=0a8a1eaf0e54cd3d2f06886fb428c6b5

转载于:https://www.cnblogs.com/125418a/p/11531101.html

The Nth Item相关推荐

  1. 2019 ICPC 南昌网络赛 H. The Nth Item

    2019 ICPC 南昌网络赛 H. The Nth Item 题目大意:已知一个数列F(n): F(0)=0,F(1)=1 F(n)=3∗F(n−1)+2∗F(n−2),(n≥2) ​ 给你一个操作 ...

  2. 2019ICPC(南昌) - The Nth Item(矩阵快速幂)

    题目链接:点击查看 题目大意:给定一个变形版的斐波那契数列,F(n)为其对应的函数值,初始时给定一个q和一个a1,规定下面两个递推式: ^ ans^= 最后输出ans 题目分析:对于变形版的斐波那契函 ...

  3. 2019南昌网络赛 H. The Nth Item(广义斐波那契数列求通项公式模板)(二次剩余+分块)

    链接:https://nanti.jisuanke.com/t/41355 题意: Q个询问,每次求F(N),但是N要用上一次询问的结果得到. 思路: 1.直接矩阵快速幂求,再用map记一下答案,求过 ...

  4. 利用graphviz模块展示斐波那契数列的递归函数调用图(Python)

      在博客动态规划法(一)从斐波那契数列谈起中,在求解斐波那契数列的第n项时,我们采用了递归方法和动态规划法来求解,当然递归方法的效率很差.本文将利用graphviz模块来展示斐波那契数列的递归函数调 ...

  5. 程序员面试题精选100题(16)-O(logn)求Fibonacci数列[算法]

    题目:定义Fibonacci数列如下: /  0                      n=0 f(n)=      1                      n=1         \  f ...

  6. python itertool_函数式编程的Python实践(2):Itertool

    我们的上一个文章从很质朴的角度分析了究竟如何实践函数式的思想,但是由于Python是一个多范式的语言,既支持指令式,也支持函数式.但是,默认导入语言的函数只有map.filter和reduce(现在r ...

  7. PYTHON__ ITERTOOLS模块

    组成 总体,整体了解 无限迭代器 迭代器 参数 结果 例子 count() start, [step] start, start+step, start+2*step, ... count(10) - ...

  8. python自带intertool模块找不到_Python itertools模块详解

    这货很强大, 必须掌握 基本是基于文档的翻译和补充,相当于翻译了 itertools用于高效循环的迭代函数集合 组成 总体,整体了解 无限迭代器 复制代码代码如下: 迭代器 参数 结果 例子 coun ...

  9. python和汇编_python – 你对这些汇编助记符有什么建议吗?

    上学期大学时,我的计算机语言课程的老师教给我们一个名为 Whitespace的深奥语言.为了更好地学习语言,我的课程非常繁忙(midterms),我在 Python写了一个 interpreter和 ...

最新文章

  1. 通过评估假设行为来学习人类目标
  2. 记一次性能优化,单台4核8G机器支撑5万QPS
  3. vue上传录音_vue用到H5+的录音功能 真机模拟的时候不能实现
  4. html页面vertical,vertical.html
  5. Vue中使用v-for实现一对多数据的2层和3层嵌套循环
  6. 简单数据恢复菜鸟教程 (转)
  7. c 读取url中的html文本,如何使用Guzzlehttp获取给定url的html内容
  8. 真实体验!我在 500 强咨询公司写代码
  9. asmack获取用户头像和设置昵称与获取好友昵称
  10. H3C交换机常用配置命令
  11. 永洪BI悬停效果展示---第三集
  12. 神经网络,英文字母识别
  13. android 音视频录制
  14. linux2.6内核驱动程序注册函数,于PCI9656设备驱动程序的Linux2.6内核研究
  15. stimulsoft入门教程:简单列表报表
  16. 微信公众号发送汉字乱码
  17. 太忙,没时间去电影院?在家看院线电影就用移动电影院APP
  18. 输入文本的html,输入文本的步骤主要包括
  19. 如何注册公司邮箱?公司邮箱邮件这样写98%的人都爱看
  20. python文献检索_文献检索与下载

热门文章

  1. lightgbm过去版本安装包_Node版本管理利器-NVM,你们用过吗?
  2. python扩展c教程_使用C/C++扩展Python
  3. hibernate版本_基于jsp+mysql+Spring+hibernate+Struts 2的SSH在线蛋糕销售网站平台管理系统...
  4. oracle11g临时表,oracle11G的临时表空间
  5. c++运动学正反解 ros_ROS系统MoveIt玩转双臂机器人系列(六)–D-H逆运动学求解程序(C++)...
  6. yii mysql 操作数据库_YII2中操作数据库的方式
  7. apache httpd配置后启动失败或域名绑定无效等问题解决方法
  8. 分布问题(二元,多元变量分布,Beta,Dir)
  9. awk分割列 输出时间相关
  10. 第89天:HTML5中 访问历史、全屏和网页存储API