薛先生的后代IQ【循环节】||【快速幂】

薛先生想改变后代的IQ,为此他发明了一种药,这种药有三种属性:A, B,
P。他父亲的智商为X,薛先生的智商为Y,用了这种药之后,薛先生的孩子的智商就可以变为(AX+BY) mod P。后代的智商以此类推。

现在给定X和Y,还有药的属性A、B和P,现在他想知道他的N代子孙的IQ(儿子是第一代,孙子是第二代)。

Input
第一行包含一个整数T(T<=100),表示数据组数 每组数据只有一行,包含六个整数X,Y,A,B,P,N(1 ≤ X, Y ≤ 300,1 ≤ A, B ≤ 30, 1≤ P ≤ 300 , 1 ≤ N < 1000000000),含义如题目所述
Output
针对每组数据,输出第N代子孙的智商。

Sample Input

4
180 80 1 1 190 1
189 83 2 2 190 1
189 83 1 1 190 2
172 73 23 19 273 9999

Sample Output

70
164
165
233

【思路】
本题有两种解法:

  1. 循环节
    由题显然可以看出,P在1-300之间,则结果一定会在1-90000之间出现循环节,注意是连续的两组数据要同时和之前出现的一组数据相同,才被确认为出现了循环节。另外,循环节不一定是从0,1开始,可能呈6字形,也即从数据的中间开始出现循环,这种情况一定要考虑。
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn = 90009;
int ans[maxn+2];
int vis[303][303];int main()
{int t;scanf("%d", &t);int x, y, a, b, p, n;while(t--){memset(vis, -1, sizeof(vis));scanf("%d%d%d%d%d%d", &x, &y, &a, &b, &p, &n);ans[0] = y;ans[1] = (a * x + b * y) % p;vis[ans[0]][ans[1]] = 0;int start;int circle;for(int i = 2; i < maxn; i++){ans[i] = (a * ans[i-2] + b * ans[i-1]) % p;if(vis[ans[i-1]][ans[i]] != -1){start = vis[ans[i-1]][ans[i]];circle = i - 1 - start;break;}elsevis[ans[i-1]][ans[i]] = i-1;}cout << ans[start + (n - start) % circle] << endl;}return 0;
}
  1. 快速幂
    这种类似斐波那契的数据类型,可以用快速幂来解决。要注意的是初始矩阵的初始化不能出错。然后再写一个矩乘函数就行了。

代码如下:

#include<cstdio>
#include<iostream>
#include<string>
#include<set>
using namespace std;
typedef long long LL;
int mod;
int x, y, p, q;
struct Node{LL m[3][3];};void Init(Node &t, Node &a){t.m[1][1] = y;t.m[2][2] = 0;t.m[1][2] = x;t.m[2][1] = 0;a.m[1][1] = q;a.m[1][2] = 1;a.m[2][1] = p;a.m[2][2] = 0;
}Node mul(Node a, Node b){Node tem;tem.m[1][1] = (a.m[1][1] * b.m[1][1] + a.m[1][2] * b.m[2][1]) % mod;tem.m[1][2] = (a.m[1][1] * b.m[1][2] + a.m[1][2] * b.m[2][2]) % mod;tem.m[2][1] = (a.m[2][1] * b.m[1][1] + a.m[2][2] * b.m[2][1]) % mod;tem.m[2][2] = (a.m[2][1] * b.m[1][2] + a.m[2][2] * b.m[2][2]) % mod;return tem;
}int main (){int n;int tim;scanf("%d", &tim);Node t, a;while(tim--){scanf("%d%d%d%d%d%d", &x, &y, &p, &q, &mod, &n);Init(t, a);while(n){if(n&1) t = mul(t,a);a = mul(a, a);n >>= 1;}cout << t.m[1][1] % mod << endl;}return 0;
}

薛XX后代的IQ CSU1597【循环节】或【快速幂】相关推荐

  1. hdu4291 暴力循环节+矩阵快速幂

    题意:       给你一个关系式,x[n] = 3*x[n-1] + x[n-2],求x(x(x[n]))%1000000007. 思路:       做这个题目要明确一点,就是对于取余操作大多数时 ...

  2. 2018蓝桥杯A组:分数(3种方法 循环累称 快速幂运算 移位运算)

    一.题目:分数 1/1 + 1/2 + 1/4 + 1/8 + 1/16 + - 每项是前一项的一半,如果一共有20项, 求这个和是多少,结果用分数表示出来. 类似: 3/2 当然,这只是加了前2项而 ...

  3. [剑指Offer]:数值的整数次方(循环解答,快速幂---递归、循环)

    文章目录 题目描述 解答思路 题目描述 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 保证base和exponent不同时为0 示例: ...

  4. 大数问题(循环求余/快速幂求余/快速幂问题)

    大数问题 1.大数求余问题 解题思路 1.1循环求余O(n)O(n)O(n) 1.2.快速幂求余O(log⁡n)O(\log n)O(logn) 2.快速幂问题 解题思路 1.大数求余问题 在仅使用i ...

  5. 循环矩阵的快速幂(bzoj 2510: 弱题)

    2510: 弱题 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 408  Solved: 218 [Submit][Status][Discuss] ...

  6. 欧拉函数求一个数倒数的循环节长度

    首先,费马小定理a与p互素,则a^(p-1)≡1(mod p)  对于一个素数p,取a=10,那么10^(p-1)≡1(mod p)  如果找到一个正整数e使得10^e/p-1/p为整数,那么e就是1 ...

  7. 求循环小数的表示以及循环节长度

    问题:输入整数a和b,输出a/b的循环小数表示以及其循环节长度.例如 a=5 b=43 小数表示为0.(116279069767441860465),循环节长度为21 分析:模拟长除法的计算过程. ① ...

  8. 【音频处理】Polyphone 样本编辑 和 样本工具 ( 波形图 | 信息 | 频率分析 | 均衡器 | 播放器 | 终点裁剪 | 自动循环节 | 空白移除 | 音量 平衡 音调 调整 )

    文章目录 一. Polyphone 工具简介 1. 相关参考资料 2. 简要介绍 (1) 软件界面 二. 音源编辑 1. 波形图 ( 1 ) 波形图样式 ( 2 ) 波形图操作 2. 信息 ( 1 ) ...

  9. 嫦娥奔月(KMP,找循环节)及其扩展KMP

    问题描述 <归妹>卦辞为:昔者恒我(姮娥)窃毋死之药于西王母,服之以(奔)月.将往,而枚占于有黄.有黄占之曰:"吉.翩翩归妹,独将西行.逢天晦芒,毋惊毋恐,后且大昌". ...

最新文章

  1. Spring Boot微服务中Chaos Monkey的应用
  2. 第三章 线性代数回顾-机器学习老师板书-斯坦福吴恩达教授
  3. 深度学习(三十二)——AlphaGo, AlphaStar
  4. C++ 复制字符串/字符数组
  5. 暴力——猜数字(hdu1172)
  6. 如何把Java的double类型变量保留两位小数
  7. 【数据结构和算法笔记】KMP算法介绍
  8. python的迭代器_python迭代器详解
  9. tableau示例超市数据在哪儿_Tableau | 超市销售数据可视化分析
  10. Linux系统中PostgreSQL客户端的安装
  11. 单片机零基础入门(8-5)模块化编程
  12. 计算机物理仿真,仿真物理实验室初中完整版
  13. 国内使用谷歌地图方案
  14. 利用MEGA-X选择模型及构建美化进化树
  15. 「更快!更爽!」吹水新闻2.0
  16. 微信退款返回的几种情况
  17. 如何修改游戏服务器ip地址吗,怎么修改游戏服务器ip地址
  18. Memcached快递上手之C#
  19. JAVA简单编写幸运抽奖
  20. 聚焦2018爱思唯尔-环球科学卓越科研论坛

热门文章

  1. 多任务学习,如何设计一个更好的参数共享机制?| AAAI 2020
  2. 盯住未来!揭秘英特尔的AI芯片生意
  3. 人工智能帮助预测混合用药的副作用
  4. 作为产品经理,你需要了解的基本算法知识和实操
  5. Tensorflow—Droupout
  6. 《Nature》:衰老后的核糖体发生了哪些致病变化
  7. 通过学习生物范式,寻找解决AI识别噪音的新方法
  8. 收藏!全国31个省市区重点产业布局!
  9. 谷歌新智能体Dreamer将亮相NeurIPS 2019,数据效率比前身PlaNet快8个小时
  10. 微软向马斯克的人工智能公司OpenAI投资10亿美元