bzoj 3884 欧拉定理
求$$2^{2^{2^{2^{…}}}} mod n$$的值,其中n有1e7。
老实说这题挺有趣的,关键是怎么化掉指数,由于是取模意义下的无限个指数,所以使用欧拉定理一定是可以把指数变为不大于$\varphi(n)$的,但是我们连上一层指数的值都不知道,怎么化阿...
考虑同余定理,把n变为$n=2^k·s$的形式,然后$2^k$先提取出来,这样每向一层模数会减少,最后到1这样最后一层可以得到0的值了,回溯时计算完一层的指数时再把$2^k$乘回去就好了
- /** @Date : 2017-09-11 21:22:36
- * @FileName: bzoj 3884 欧拉降幂.cpp
- * @Platform: Windows
- * @Author : Lweleth (SoungEarlf@gmail.com)
- * @Link : https://github.com/
- * @Version : $Id$
- */
- #include <bits/stdc++.h>
- #define LL long long
- #define PII pair<int ,int>
- #define MP(x, y) make_pair((x),(y))
- #define fi first
- #define se second
- #define PB(x) push_back((x))
- #define MMG(x) memset((x), -1,sizeof(x))
- #define MMF(x) memset((x),0,sizeof(x))
- #define MMI(x) memset((x), INF, sizeof(x))
- using namespace std;
- const int INF = 0x3f3f3f3f;
- const int N = 1e7+20;
- const double eps = 1e-8;
- LL fpow(LL a, LL n, LL mod)
- {
- LL res = 1;
- while(n)
- {
- if(n & 1)
- res = (res * a % mod + mod) %mod;
- a = (a * a % mod + mod ) % mod;
- n >>= 1;
- }
- return res;
- }
- int pri[N];
- int phi[N];
- int c = 0;
- void prime()
- {
- MMF(phi);
- phi[1] = 1;
- for(int i = 2; i < N; i++)
- {
- if(!phi[i])
- pri[c++] = i, phi[i] = i - 1;
- for(int j = 0; j < c && i * pri[j] < N; j++)
- {
- phi[i * pri[j]] = 1;
- if(i % pri[j] == 0)//是倍数i=kp, phi(kpp)=kpp*[phi(kp)/kp]=p*phi(kp)
- {
- phi[i * pri[j]] = phi[i] * pri[j];
- break;
- }
- else //积性函数性质 (i, p) = 1, phi(ip)=phi(i)*phi(p)
- phi[i * pri[j]] = phi[i] * (pri[j] - 1);
- }
- }
- }
- int get_phi(int x)
- {
- int phi = x;
- for(int i = 2; i * i <= x; i++)
- {
- if(x % i == 0)
- {
- while(x % i==0)
- x /= i;
- phi = phi / i * (i - 1);
- }
- }
- if(x > 2)
- phi = phi / x * (x - 1);
- return phi;
- }
- int dfs(int p)
- {
- if(p == 1)
- return 0;
- int k = 0;
- while(p % 2 == 0)
- p>>=1, k++;
- int s = p;
- int phis = get_phi(s);/*phi[s];*/
- int nxe = dfs(phis);//模数向上递归
- nxe = (nxe - k % phis + phis) % phis;//欧拉降幂
- nxe = fpow(2, nxe, s) % s;
- return nxe << k;
- }
- int main()
- {
- int T;
- //prime();
- cin >> T;
- while(T--)
- {
- int mod;
- scanf("%d", &mod);
- printf("%d\n", dfs(mod));
- }
- return 0;
- }
bzoj 3884 欧拉定理的更多相关文章
- BZOJ 3884 欧拉定理 无穷幂取模
详见PoPoQQQ的博客.. #include <iostream> #include <cstring> #include <cstdio> #include & ...
- [BZOJ 3884][欧拉定理]上帝与集合的正确使用方法
看看我们机房某畸形写的题解:http://blog.csdn.net/sinat_27410769/article/details/46754209 此题为popoQQQ神犇所出,在此orz #inc ...
- BZOJ 3884 拓展欧拉定理
3884: 上帝与集合的正确用法 Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 4142 Solved: 1907[Submit][Status][D ...
- BZOJ.3884.上帝与集合的正确用法(扩展欧拉定理)
\(Description\) 给定p, \(Solution\) 欧拉定理:\(若(a,p)=1\),则\(a^b\equiv a^{b\%\varphi(p)}(mod\ p)\). 扩展欧拉定理 ...
- BZOJ 3884: 上帝与集合的正确用法 扩展欧拉定理 + 快速幂
Code: #include<bits/stdc++.h> #define maxn 10000004 #define ll long long using namespace std; ...
- BZOJ 3884 上帝与集合的正确用法(扩展欧拉定理)
Description 根据一些书上的记载,上帝的一次失败的创世经历是这样的: 第一天, 上帝创造了一个世界的基本元素,称做“元”. 第二天, 上帝创造了一个新的元素,称作“α”.“α”被定义为“ ...
- bzoj 3884 上帝与集合的正确用法(递归,欧拉函数)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3884 [题意] 求2^2^2… mod p [思路] 设p=2^k * q+(1/0) ...
- BZOJ 3884 上帝与集合的正确用法
Description 根据一些书上的记载,上帝的一次失败的创世经历是这样的: 第一天, 上帝创造了一个世界的基本元素,称做"元". 第二天, 上帝创造了一个新的元素,称作&quo ...
- BZOJ 3884: 上帝与集合的正确用法 [欧拉降幂]
PoPoQQQ大爷太神了 只要用欧拉定理递归下去就好了.... 然而还是有些细节没考虑好: $(P,2) \neq 1$时分解$P=2^k*q$的形式,然后变成$2^k(2^{(2^{2^{...}} ...
随机推荐
- Alpha 冲刺5
队名:日不落战队 安琪(队长) 今天完成的任务 组织第五次站立式会议(半冲刺总结交流会). 完成草稿箱前端界面. 明天的计划 回收站前端界面. 尝试去调用数据. 还剩下的任务 信息修改前端界面. 遇到 ...
- 转 使用Docker部署 spring-boot maven应用
转自:https://blog.csdn.net/u011699931/article/details/70226504/ 使用Docker部署 spring-boot maven应用 部署过程分为以 ...
- jdbc 2.0
1.Statement接口不能接受参数 2.PreparedStatement接口在运行时接受输入参数 3.CallableStatement接口也可以接受运行时输入参数,当想要访问数据库存储过程时使 ...
- 博客搬家 --- CSDN
博客园好久没维护了,搬家吧 欢迎移步到新博客
- js & enter
js & enter keycode function (e) { if (e.which === 13 || e.keyCode === 13) { //code to execute he ...
- python获取toast 验证
appium版本 1.6.3 desired_caps['automationName']='uiautomator2' def _find_toast(self,message,timeou ...
- Vue父组件与子组件传递事件/调用事件
1.Vue父组件向子组件传递事件/调用事件 <div id="app"> <hello list="list" ref="child ...
- 【EF】Entity Framework Core 软删除与查询过滤器
本文翻译自<Entity Framework Core: Soft Delete using Query Filters>,由于水平有限,故无法保证翻译完全正确,欢迎指出错误.谢谢! 注意 ...
- 【EF】EF Code First Migrations数据库迁移
1.EF Code First创建数据库 新建控制台应用程序Portal,通过程序包管理器控制台添加EntityFramework. 在程序包管理器控制台中执行以下语句,安装EntityFramewo ...
- hdu3507 Print Article(斜率优化入门)(pascal)
Problem Description Zero has an old printer that doesn't work well sometimes. As it is antique, he s ...