博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu-2685 I won't tell you this is about number theory---gcd和快速幂的性质
阅读量:6262 次
发布时间:2019-06-22

本文共 1023 字,大约阅读时间需要 3 分钟。

题目链接:

题目大意:

求gcd(am-1,an-1)%k

解题思路:

对于am-1 = (a - 1) * (1 + a + a2 + ... + am-1)

所以最开始的gcd就为a-1

对于两个1 + a + a2 + ... + am-1和1 + a + a2 + ... + an-1来说,可以找出gcd(m, n)那么久就可以提出gcd

比如:

1 + a + a2 + a3

1 + a + a2 + ... + a5

这两个可以写成(1+a)*(1 + a2) 和(1+a)*(1 + a2+ a4

就提出公因式(1 + a)

这里公因式如何确定呢?

就是从0一直加到m和n的gcd-1次方,这样的话m和n才可以分解成多个从0---gcd-1的幂之和

所以,gcd(am-1,an-1) = (a-1)*(1 + a + a2 + a3 + ... + ag-1) = ag - 1

上式中g等于gcd(m, n)

也就是这个式子:

1 #include
2 using namespace std; 3 typedef long long ll; 4 int pow(int a, int b, int m) 5 { 6 int ans = 1; 7 a %= m; 8 while(b) 9 {10 if(b & 1)ans = ans * a % m;11 a *= a;12 a %= m;13 b /= 2;14 }15 return ans;16 }17 int main()18 {19 int T, a, m, n, k, g;20 cin >> T;21 while(T--)22 {23 cin >> a >> m >> n >> k;24 g = __gcd(m, n);25 int ans = (pow(a, g, k) - 1) % k;26 ans = (ans + k) % k;27 cout<
<

 

 

转载于:https://www.cnblogs.com/fzl194/p/9058366.html

你可能感兴趣的文章
JQuery初体验
查看>>
全球顶级黑客对决AI GeekPwn2017黑客大赛看点全面曝光
查看>>
浅析前端开发中的 MVC/MVP/MVVM 模式
查看>>
toString、equals和hashCode重写
查看>>
sizeof 和strlen的区别
查看>>
Python与C++引用分析
查看>>
误删一个用户 引起数据不准确问题
查看>>
一场失败的拔河比赛
查看>>
IOS开发工程师欢迎你加入宏略信息
查看>>
java 判断当前时间符合cron时间表达式
查看>>
Telnet协议的实现
查看>>
我的友情链接
查看>>
(一)指南一、初学者指南1、简介2、安装
查看>>
约瑟夫·奈:透视网络空间
查看>>
我的友情链接
查看>>
大数据入门基础:Hadoop简介
查看>>
jdk1.7新特性
查看>>
杭电1029--Ignatius and the Princess IV(哈希)
查看>>
使用CSS3改变文本选中的默认颜色
查看>>
课后作业-阅读任务-阅读提问-3
查看>>