BZOJ 3884——欧拉降幂和广义欧拉降幂
理论部分
欧拉定理:若 $a,n$ 为正整数,且 $a,n$ 互质,则 $a^{\varphi (n)} \equiv 1(mod \ n)$.
降幂公式:
$$a^b=
\begin{cases}
a^{b \% \varphi(p)} & gcd(a,p)=1 \\
a^b & gcd(a,p)\neq 1,b < \varphi (p) \\
a^{b\% \varphi (p) + \varphi (p)} & gcd(a,p)\neq 1,b \geq \varphi (p)
\end{cases}$$
题目
求 $2^{2^{2...}} \ mod \ p$ 的值,$T$组询问。$T \leq 1000, p \leq {10}^7$
分析:
首先,必须明确模意义下的无穷与真正的无穷是有区别的,(不然无穷的怎么求值
由降幂公式,当 $x \geq \varphi (p)$ 时(这道题中 $x$ 一直为2的无穷次方,肯定大于 $\varphi(p)$),
$$a^x \equiv a^{x \% \phi (p) + \varphi (p)}(mod \ p)$$
所以,令 $f(p) = 2^{2^{2...}}(mod \ p)$,$f(1)=0$,
$$\\f(p)=2^{(2^{2^{...}} mod \; \phi(p)) + \phi(p)}mod \; p \\=2^{f(\phi(p)) + \phi(p)} mod \ p$$
因此可以递归求解。
时间复杂度是多少呢?
求 $\phi(p)$ 是 $\sqrt p$,进行 $\varphi (\varphi (...\varphi (p))) = O(logp)$ 次,直至为1,
所以总的复杂度为 $O(\sqrt p log p)$
#include<bits/stdc++.h>
using namespace std; typedef long long ll;
int p; ll qpow(ll a, ll b, ll p)
{
ll ret = ;
while(b)
{
if(b&) ret = ret*a%p;
a = a*a%p;
b >>= ;
}
return ret;
} int euler_phi(int n)
{
int m = (int)sqrt(n + 0.5);
int ans = n;
for (int i = ; i <= m; i++)
{
if (n % i == )
{
ans = ans / i * (i - );
while (n % i == ) n /= i; //除尽
}
}
if (n > ) ans = ans / n * (n - ); //剩下的不为1,也是素数
return ans;
} int f(int p)
{
if(p == ) return ;
int phip = euler_phi(p);
return qpow(, f(phip)+phip, p);
} int main()
{
int T;
scanf("%d", &T);
while(T--)
{
scanf("%d", &p);
printf("%d\n", f(p));
}
return ;
}
参考链接:
1. https://blog.csdn.net/skywalkert/article/details/43955611
2. https://blog.csdn.net/qq_37632935/article/details/81264965
BZOJ 3884——欧拉降幂和广义欧拉降幂的更多相关文章
- ACM-数论-广义欧拉降幂
https://www.cnblogs.com/31415926535x/p/11447033.html 曾今一时的懒,造就今日的泪 记得半年前去武大参加的省赛,当时的A题就是一个广义欧拉降幂的板子题 ...
- Power Tower(广义欧拉降幂)
题意:https://codeforc.es/contest/906/problem/D 计算区间的: ai ^ ai+1 ^ ai+2.......ar . 思路: 广义欧拉降幂: 注意是自下而上递 ...
- 广义欧拉降幂(欧拉定理)——bzoj3884,fzu1759
广义欧拉降幂对于狭义欧拉降幂任然适用 https://blog.csdn.net/qq_37632935/article/details/81264965?tdsourcetag=s_pctim_ai ...
- bzoj 3884 欧拉定理
求$$2^{2^{2^{2^{…}}}} mod n$$的值,其中n有1e7. 老实说这题挺有趣的,关键是怎么化掉指数,由于是取模意义下的无限个指数,所以使用欧拉定理一定是可以把指数变为不大于$\va ...
- 可控制导航下拉方向的jQuery下拉菜单代码
效果:http://hovertree.com/texiao/nav/1/ 代码如下: <!DOCTYPE html> <html> <head> <meta ...
- 定位和xml解析和gson解析加上拉加载,下拉刷新
这里的上拉加载,下拉刷新用到是依赖包 Mainactivity,xml解析和定位 package com.exmple.autolayout; import java.util.List; impor ...
- UITableView与UISearchController搜索及上拉加载,下拉刷新
#import "ViewController.h" #import "TuanGouModel.h" #import "TuanGouTableVi ...
- PullToRefreshListView上拉加载、下拉刷新
说明:此项目使用studio完成的.需要导入library作为依赖,使用了xuitls获得网络请求.使用Pull解析了XML eclipse中的项目: //注意:此刷新功能是使用的第三方的PullTo ...
- Vue-上拉加载与下拉刷新(mint-ui:loadmore)一个页面使用多个上拉加载后冲突问题
所遇问题: 该页面为双选项卡联动,四个部分都需要上拉加载和下拉刷新功能,使用的mint-ui的loadmore插件,分别加上上拉加载后,只有最后一个的this.$refs.loadmore.onTop ...
随机推荐
- json 和对象互相转换
json 和对象互相转换 导入 Jar 包: import com.fasterxml.jackson.databind.ObjectMapper; Maven 地址: <!-- https:/ ...
- web平台大数据请求传输性能处理
在XMLHttpRequest请求中使用ArrayBuffer方式,和后端服务器进行二进制的传输交互. 在项目中发现随着用户增长,部分前端功能,请求的数据量越来越大,传统的josn的方式,在下载.序列 ...
- Z1. 广度优先搜索(BFS)解题思路
/** BFS 解题思路 特点:从某些特定的节点开始,感染相邻的节点; 被感染的节点,再感染其相邻的节点,以此类推. 题目常见于数据结构包括 二维数组.树.图 **/ /** 1). 二维数组特定节点 ...
- 路由器02---PandoraBox配置
1.安装libc 什么是libc,这里贴一个gnu官方的解释 Any Unix-like operating system needs a C library: the library which d ...
- WIN10更换无线网卡后WIFI无法正常启用
这里根据自己经历提供几个方案: 首先我们要确定这两个地方正常(表示网卡能识别.驱动安装好:有无线开关没打开的朋友请出门右转): 方案一:万能的重启,不觉得麻烦的就多重启几遍.大力出奇迹! 方案二:然后 ...
- ARTS第七周打卡
Algorithm : 做一个 leetcode 的算法题 ////////////////////////////////////////////////////////////////////// ...
- Python创建线程
Python 提供了 _thread 和 threading 两个模块来支持多线程,其中 _thread 提供低级别的.原始的线程支持,以及一个简单的锁,正如它的名字所暗示的,一般编程不建议使用 th ...
- VMware安装windows2003
一.安装vm 这一项大家应该都会,网上也有很多教程. 二.搭建Windows server 2003 1.镜像下载- 2.虚拟机安装 首先是新建虚拟机,我选的是自定义,也可以选典型 第一步默认下一步, ...
- 下载GDB调试工具peda
命令: 1.git clone https://github.com/longld/peda.git ~/peda 2.echo "source ~/peda/peda.py" & ...
- WUSTOJ 1290: 01字串(Java)
题目链接: