博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Codeforces Beta Round #17 D. Notepad
阅读量:6831 次
发布时间:2019-06-26

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

主要问题是怎么求$a^b \ mod \ c$。

可以用欧拉定理降幂。

$$a^b \ mod \ c = a ^ {b \% \varphi(c) } \; mod \ c (b < \varphi(c))$$

$$a^b \ mod \ c = a ^ {b \% \varphi(c) + \varphi(c)} \; mod \ c (b \geqslant \varphi(c))$$

1 #include
2 #include
3 #include
4 using namespace std; 5 char B[1000005], A[1000005]; 6 typedef long long ll; 7 ll phi(int x) { 8 ll res = x; 9 for (int i = 2; i * i <= x; ++i)10 if (x % i == 0) {11 res = res / i * (i - 1);12 while (x % i == 0) x /= i;13 }14 if (x > 1) res = res / x * (x - 1);15 return res;16 }17 ll pow(ll a, ll b, ll m) {18 ll res = 1;19 for (a %= m; b; b >>= 1, a = (a * a) % m)20 if (b & 1) res = (res * a) % m;21 return res;22 }23 int c;24 ll a, a_1, b;25 int main() {26 scanf("%s", A); scanf("%s", B); scanf("%d", &c);27 int lal = strlen(A), lbl = strlen(B);28 for (int i = 0; i < lal; ++i) {29 a = (a * 10 + A[i] - '0') % c;30 }31 for (int i = lal - 1; ~i; --i) {32 if (A[i] == '0') A[i] = '9';33 else {--A[i]; break;}34 }35 for (int i = 0; i < lal; ++i)36 a_1 = (a_1 * 10 + A[i] - '0') % c;37 int flag = 0, p = phi(c);38 for (int i = 0; i < lbl; ++i) {39 b = (b * 10 + B[i] - '0');40 if (b >= p) flag = 1;41 b %= p;42 }43 if (flag) b += p;44 ll ans = pow(a, b - 1, c) * a_1 % c;45 printf("%lld\n", ans ? ans : c);46 return 0;47 }

 

转载于:https://www.cnblogs.com/p0ny/p/8339888.html

你可能感兴趣的文章
NOI2010 : 超级钢琴
查看>>
sine曲线向前运动
查看>>
ios的@property属性和@synthesize属性(转)
查看>>
四种常见的 POST 提交数据方式
查看>>
编写一个C语言函数,要求输入一个url,输出该url是首页、目录页或者其他url
查看>>
ubuntu 14.04 chromium,firefox 怎样正确安装Adobe flash player
查看>>
Linux makefile 教程 很具体,且易懂
查看>>
linux用dd测试磁盘速度
查看>>
八大排序算法总结
查看>>
Fibre Channel和Fiber Channel
查看>>
两年前实习时的文档——Platform学习总结
查看>>
Performance Tuning MySQL
查看>>
【WP8】让TextBox文本支持滑动(Scroll)
查看>>
在IIS上创建FTP服务
查看>>
Orchard之在前台显式一个属于自己的列表
查看>>
openfire文件夹
查看>>
Eclipse下快速打开本地文件的插件easy explore
查看>>
uva216 Getting in Line
查看>>
黑龙潭,一个夏日亲子游的好地方
查看>>
编译安装 nginx的http_stub_status_module监控其运行状态
查看>>