FUZ 1759 Super A^B mod C (指数循环节/模板)
题意:求A^B mod C,其中(1<=A,C<=1000000000,1<=B<=10^1000000).
思路:
在有些题目中我们需要对指数进行降幂处理才能计算。比如计算
其中和
这里由于很大,所以需要进行降幂。那么实际上有如下降幂公式
有了上述公式,很多题目就可以迎刃而解了。
摘自ACdreamer博客
代码:
#include <iostream> #include <string.h> #include <stdio.h>using namespace std; const int N=1000005; typedef long long ll;char str[N];int phi(int n) {int rea = n;for(int i=2; i*i<=n; i++){if(n % i == 0){rea = rea - rea / i;while(n % i == 0) n /= i;}}if(n > 1)rea = rea - rea / n;return rea; }ll multi(ll a,ll b,ll m) {ll ans = 0;a %= m;while(b){if(b & 1){ans = (ans + a) % m;b--;}b >>= 1;a = (a + a) % m;}return ans; }ll quick_mod(ll a,ll b,ll m) {ll ans = 1;a %= m;while(b){if(b & 1){ans = multi(ans,a,m);b--;}b >>= 1;a = multi(a,a,m);}return ans; }void Solve(ll a,char str[],ll c) {ll len = strlen(str);ll ans = 0;ll p = phi(c);if(len <= 15){for(int i=0; i<len; i++)ans = ans * 10 + str[i] - '0';}else{for(int i=0; i<len; i++){ans = ans * 10 + str[i] - '0';ans %= p;}ans += p;}printf("%I64d\n",quick_mod(a,ans,c)); }int main() {ll a,c;while(~scanf("%I64d%s%I64d",&a,str,&c))Solve(a,str,c);return 0; }
转载于:https://www.cnblogs.com/simplekinght/p/6683324.html
FUZ 1759 Super A^B mod C (指数循环节/模板)相关推荐
- fzu - Problem 1759 Super A^B mod C
题解:A^B%C = A^(B%φ(c)+φ(c))%C; 知道这个公式,接下来怎么做,你懂得~~~ #include<stdio.h> #include<math.h> # ...
- 【FZU - 1759】Super A^B mod C (数论,快速幂,快速乘,欧拉降幂,指数循环节,模板)
题干: Given A,B,C, You should quickly calculate the result of A^B mod C. (1<=A,C<=1000000000,1&l ...
- 求 A^B mod C. (1=A,C=1000000000,1=B=10^1000000).(fzu1759,hdu3221,hdu4335)
题目:http://acm.fzu.edu.cn/problem.php?pid=1759 也算是快速幂的一题了,只不过这里的指数B特别大.需要用到一个公式: A^x = A^(x % Phi(C) ...
- 【牛客 -330E 】Applese 涂颜色(费马小定理,超级快速幂)
题干: 精通程序设计的 Applese 叕写了一个游戏. 在这个游戏中,有一个 n 行 m 列的方阵.现在它要为这个方阵涂上黑白两种颜色.规定左右相邻两格的颜色不能相同.请你帮它统计一下有多少种涂色的 ...
- 三个重要的同余式——威尔逊定理、费马小定理、欧拉定理 + 求幂大法的证明
一.威尔逊定理 若p为质数,则 p|(p-1)!+1 亦:(p-1)! ≡ p-1 ≡ -1(mod p) 例题: HDU 2973 YAPTCHA (威尔逊定理及其逆定理) 解题报告见http:// ...
- Applese 涂颜色
https://ac.nowcoder.com/acm/contest/330/E Python版本一 题解: std 一个比较显然的结论是,对于每一列,有 2n 种涂色方法. 我们可以发现,当确定了 ...
- 数论杂谈(欧拉定理与费马小定理结论与应用)
文章目录 欧拉定理: 欧拉定理性质: 扩展欧拉定理: 费马小定理: 指数循环节 费马大定理 逆元: 例题 原根 定义: 原根存在条件 例题 快速幂 代码 矩阵快速幂 原理: 代码: 欧拉定理: aφ( ...
- c语言定义int 输出4386,C语言 · 矩阵乘法
问题描述 输入两个矩阵,分别是m*s,s*n大小.输出两个矩阵相乘的结果. 输入格式 第一行,空格隔开的三个正整数m,s,n(均不超过200). 接下来m行,每行s个空格隔开的整数,表示矩阵A(i,j ...
- 数学:(一直很浮躁)
数论 算术基本定理 唯一质因数分解定理及其推论(LL 范围内的数字,质因数个数最多不会超过20个,INT 范围内数字,质因数个数最多不会超过10个) 威尔逊定理 威尔逊定理给出了判定一个自然数是否为素 ...
最新文章
- knn的python代码_Python代码实现KNN算法
- JVM Class详解之一
- 电脑卡顿不流畅怎么解决_电脑用久了卡怎么办?学会这四招解决你的电脑卡顿问题...
- 单链表的按位置插入和删除
- Python——文件操作
- gRPC创建Java RPC服务
- hadoop最新稳定版本dkhadoop版本选择介绍
- Git基础知识与常用命令
- Win8.1激活方法
- 破解wifi密码最简单教程 就三步
- 2008-2019年高等学校科技统计资料汇编
- 分辨率单位及换算详解
- linux如何使用磁盘阵列卡,Ubuntu 上创建常用磁盘阵列
- RandomAccessSource not opened
- 威联通 php升级,威联通折腾篇十七:Docker 安装的 NextCloud 升级、备份及恢复
- java面试逻辑思维题目_逻辑思维面试题-java后端面试
- Python动态画图小代码(Turtle Graphics)
- 大疆机甲大师教育机器人Python开发:中文命名变量初尝试
- 正大国际期货:什么是黄金保证金交易?黄金保证金交易包含哪些要点?
- CSS学习笔记(内边距~文字在盒子里的垂直居中)