P5091 【模板】扩展欧拉定理
昨天考试考到了欧拉公式,结果发现自己不会,就来恶补一下。
欧拉公式
- \(a^b \bmod p = a^{b}\) \(b < \varphi(p)\)
- \(a^b \bmod p = a^{b\bmod \varphi(p) + \varphi(p)}\) $b \geq \varphi(p) $
具体证明的话可以看一下 扶咕咕的博客,我也是看他的博客才懂得QWQ。
在预处理的的时候,我们就可以判断一下 \(b\) 的大小,具体的话可以这么来实现
LL get(int p)
{
bool flag = 0;//flag 表示当前读入的这个数是否大于p
LL s = 0, w = 1; char ch = getchar();
while(ch < '0' || ch > '9'){if(ch == '-') w = -1; ch = getchar();}
while(ch >= '0' && ch <= '9')
{
s = s * 10 + ch - '0';
if(s >= p) flag = 1;s %= p;//如果大于p的话,就把flag变为1,同时在对p取模
ch = getchar();
}
if(flag) s += p;//根据欧拉定理如果指数大于p,则需要再加上一个p
return s * w;
}
处理一个数的欧拉函数可以在 \(\sqrt n\) 的时间内求出来,根据他的递推公式 \(\displaystyle\varphi(n) = n \prod_{质数p\mid n}(1-{1\over p})\) 求一下就行
代码
LL Euler(LL n)
{
LL res = n;
for(int i = 2; i <= sqrt(n); i++)//枚举他的约数
{
if(n % i == 0)
{
res = res / i * (i-1);//递推公式
while(n % i == 0) n /= i;//这个质因子除尽
}
}
if(n > 1) res = res / n * (n-1);//最后剩下的质因子可能会大于 n,比如 6 = 2 * 3,这时候再把这个质因子算上就行
return res;
}
AC代码
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
#define LL long long
LL a,m,b,p;
LL get(int p)
{
bool flag = 0;
LL s = 0, w = 1; char ch = getchar();
while(ch < '0' || ch > '9'){if(ch == '-') w = -1; ch = getchar();}
while(ch >= '0' && ch <= '9')
{
s = s * 10 + ch - '0';
if(s >= p)
{
flag = 1;
s %= p;
}
ch = getchar();
}
if(flag) s += p;
return s * w;
}
LL ksm(LL a,LL b,LL p)
{
LL res = 1;
for(; b; b >>= 1)
{
if(b & 1) res = res * a % p;
a = a * a % p;
}
return res;
}
LL Euler(LL n)
{
LL res = n;
for(int i = 2; i <= sqrt(n); i++)
{
if(n % i == 0)
{
res = res / i * (i-1);
while(n % i == 0) n /= i;
}
}
if(n > 1) res = res / n * (n-1);
return res;
}
int main()
{
scanf("%lld%lld",&a,&m); p = Euler(m); b = get(p);
printf("%lld\n",ksm(a,b,m) % m);
return 0;
}
P5091 【模板】扩展欧拉定理的更多相关文章
- P5091 【模板】欧拉定理(欧拉降幂)
P5091 [模板]欧拉定理 以上3张图是从这篇 博客 里盗的,讲的比较清楚. #include<bits/stdc++.h> using namespace std; typedef l ...
- P5091 【模板】欧拉定理
思路 欧拉定理 当a与m互质时 \[ a^ {\phi (m)} \equiv 1 \ \ (mod\ m) \] 扩展欧拉定理 当a与m不互质且\(b\ge \phi(m)\)时, \[ a^b \ ...
- 题解 P5091 【【模板】欧拉定理】
欧拉定理:若 \(gcd(a,n)=1\),\(a^{\varphi(n)}\equiv 1(mod\ n)\) 设 \(1\sim n-1\) 中与 \(n\) 互素的 \(\varphi(n)\) ...
- [洛谷P5091]【模板】欧拉定理
题目大意:求$a^b\bmod m(a\leqslant10^9,m\leqslant10^6,b\leqslant10^{2\times10^7})$ 题解:扩展欧拉定理:$$a^b\equiv\b ...
- [luogu4139]上帝与集合的正确用法【欧拉定理+扩展欧拉定理】
题目大意 让你求\(2^{2^{2^{\cdots}}}(mod)P\)的值. 前置知识 知识1:无限次幂怎么解决 让我们先来看一道全国数学竞赛的一道水题: 让你求解:\(x^{x^{x^{\cdot ...
- 题解报告:hdu 4704 Sum(扩展欧拉定理)
Problem Description Sample Input 2 Sample Output 2 Hint 1. For N = 2, S(1) = S(2) = 1. 2. The input ...
- VS自定义项目模板:[2]创建VSIX项目模板扩展
VS自定义项目模板:[2]创建VSIX项目模板扩展 听语音 | 浏览:1237 | 更新:2015-01-02 09:21 | 标签:软件开发 1 2 3 4 5 6 7 分步阅读 一键约师傅 百度师 ...
- BZOJ.3884.上帝与集合的正确用法(扩展欧拉定理)
\(Description\) 给定p, \(Solution\) 欧拉定理:\(若(a,p)=1\),则\(a^b\equiv a^{b\%\varphi(p)}(mod\ p)\). 扩展欧拉定理 ...
- SHOI 2017 相逢是问候(扩展欧拉定理+线段树)
题意 https://loj.ac/problem/2142 思路 一个数如果要作为指数,那么它不能直接对模数取模,这是常识: 诸如 \(c^{c^{c^{c..}}}\) 的函数递增飞快,不是高精度 ...
- bzoj3884: 上帝与集合的正确用法 扩展欧拉定理
题意:求\(2^{2^{2^{2^{...}}}}\%p\) 题解:可以发现用扩展欧拉定理不需要很多次就能使模数变成1,后面的就不用算了 \(a^b\%c=a^{b\%\phi c} gcd(b,c) ...
随机推荐
- windows版redis报错:本地计算机上的Redis服务启动后停止
解决 1.如果需要临时启动Redis 使用命令:redis-server.exe redis.windows.conf --maxheap 200m 说明:200m是指定最大堆内存是200m, ...
- Selenium使用cookis登录,并临时将cookis存储在本地【shelve数据库】
Python中自带了一个shelve库,可以帮助我们存储一些少量的数据. shelve数据库类似redis,是以[键值对]的方式进行数据的存储,有点像"字典"这种数据结构,存储在本 ...
- 为什么建议软件测试自学而不推荐去IT培训机构?浅谈IT培训机构存在的意义
原文地址:https://www.jianshu.com/p/447c65654e84 哥们别太天真啦,知乎上那些到处以大神自居,说培训机构各种神坑不靠谱的,绝对是无利不起早的,很多都是借着贬低别人来 ...
- Mysql性能参数优化
1.Max_connections (1)简介 Mysql的最大连接数,如果服务器的并发请求量比较大,可以调高这个值,当然这是要建立在机器能够支撑的情况下,因为如果连接数越来越多,mysql会为每个连 ...
- Mac 的命令行配置字体颜色
1.在mac命令行终端输入: ls -al 查看所有隐藏文件,找到.bash_profile vi .bash_profile 编辑文件,贴入以下内容并保存 source .bash_profil ...
- 360浏览器最小字号12的坑 -彻底搞清rem
之前做响应式网站,使用rem作为单位.因为浏览器的默认字号是16px,设置html {font-size: 62.5%; /*10 ÷ 16 × 100% = 62.5%*/},刚好1rem =10p ...
- W5300中文手册
如果链接没了就Q我吧1178875532 链接:https://pan.baidu.com/s/1HcNJN_T6QJCvPWymU1sFDQ 提取码:suBB
- django之admin配置
要在admin内显示的表,在admin中进行注册,然后在登录admin后台,才可以对表进行操作例如:from django.contrib import adminfrom app01 import ...
- 大写的服,看完这篇你还不懂RocketMQ算我输
目录 RocketMQ介绍 RocketMQ概念 为什么要用RocketMQ? 异步解耦 削峰填谷 分布式事务最终一致性 数据分发 RocketMQ架构 RocketMQ消息类型 普通消息 顺序消息 ...
- [剑指Offer]18-题目一:删除链表的节点 题目二:删除链表中重复节点
题目一 题目 O(1)时间复杂度删除给定链表节点. 题解 用待删除节点后一个节点的值覆盖待删除节点值,更新链接关系. 注意链表只有一个节点:删除尾结点:删除头节点的处理. 代码 class ListN ...