博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UVA10692:Huge Mods
阅读量:6771 次
发布时间:2019-06-26

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

题面

题意

输入正整数a1,a2,a3..an和模m,求a1^a2^...^an mod m

Sol

首先有\[ a^b\equiv \begin{cases} a^{b\%\phi(p)}~~~~~~~~~~~gcd(a,p)=1\\ a^b~~~~~~~~~~~~~~~~~~gcd(a,p)\neq1,b<\phi(p)\\ a^{b\%\phi(p)+\phi(p)}~~~~gcd(a,p)\neq1,b\geq\phi(p) \end{cases}~~~~~~~(mod~p) \]

递归处理,每次取\(\varphi\),可以试乘来判断是否会大于\(\varphi\)大于时加上就好了

# include 
# define RG register# define IL inline# define Fill(a, b) memset(a, b, sizeof(a))using namespace std;typedef long long ll;IL ll Read(){ RG ll x = 0, z = 1; RG char c = getchar(); for(; c < '0' || c > '9'; c = getchar()){ if(c == '#') exit(0); z = c == '-' ? -1 : 1; } for(; c >= '0' && c <= '9'; c = getchar()) x = (x << 1) + (x << 3) + (c ^ 48); return x * z;}int n, m, a[20];IL int Phi(RG int x){ RG int cnt = x; for(RG int i = 2; i * i <= x; ++i){ if(x % i) continue; while(!(x % i)) x /= i; cnt -= cnt / i; } if(x > 1) cnt -= cnt / x; return cnt;}IL int Pow(RG ll x, RG ll y, RG ll p){ RG int flg2 = 0, flg1 = 0; RG ll cnt = 1; for(; y; y >>= 1){ if(y & 1) flg1 |= (cnt * x >= p || flg2), cnt = cnt * x % p; flg2 |= (x * x >= p); x = x * x % p; } return cnt + flg1 * p;}IL int Calc(RG int x, RG int p){ if(x == n) return Pow(a[x], 1, p); return Pow(a[x], Calc(x + 1, Phi(p)), p);}int main(RG int argc, RG char* argv[]){ for(RG int Case = 1; ; ++Case){ m = Read(); n = Read(); printf("Case #%d: ", Case); for(RG int i = 1; i <= n; ++i) a[i] = Read(); printf("%d\n", Calc(1, m) % m); } return 0;}

转载于:https://www.cnblogs.com/cjoieryl/p/8318679.html

你可能感兴趣的文章
mysql 导入数据
查看>>
linux下安装python
查看>>
不通VLAN 之间通信
查看>>
exchange 2013 lesson 1- 新特性
查看>>
FPGA设计——CMOS图像采集与以太网传输显示(MT9V011)
查看>>
nginx代理配置文件模板示例
查看>>
CPU调优并发问题
查看>>
Linux系统pip更换国内源
查看>>
zabbix 报警方式之 微信公众号报警
查看>>
python 装饰器之示例讲解
查看>>
linux文本处理工具
查看>>
openssl升级脚本
查看>>
haproxy负载均衡算法
查看>>
python发送各类邮件的主要方法
查看>>
CSS 小结
查看>>
BGP Outbound Route Filtering (ORF)理论
查看>>
iptables工作原理(通俗理解)
查看>>
【函数】05、装饰器由浅入深
查看>>
DBMS_REPAIR example
查看>>
初识linux
查看>>