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 ...
随机推荐
- [windows官网]虚拟地址空间
虚拟地址空间 https://docs.microsoft.com/zh-cn/windows-hardware/drivers/gettingstarted/virtual-address-spac ...
- Spring之23:AbstractBeanFactory,Bean的加载
<spring源码之:循环依赖> AbstractBeanFactory的作用:别名管理,单例创建与注册,工厂方法FactoryBean支持. 由图我们直接的看出,AbstractBean ...
- QComboBox的currentIndexChanged信号死循环问题
connect(m_pComboBoxDevice, SIGNAL(currentIndexChanged(int)), this, SLOT(sltComboBoxDeviceCurrentText ...
- web服务器/HTTP协议基础
1.http协议:一种规范和约定,实现客户端和服务器的通信2.http请求格式:请求行+请求头+请求体 请求行:method + request-URI + http-version 方法+请求的资源 ...
- 使用HSE配置系统时钟并用MCO输出监测系统时钟
使用模板,在User下新建文件夹RCC 新建bsp_rccclkconfig.h和bsp_rccclkconfig.c 工程和魔术棒添加 对照着上节的RCC源文件编写: void HSE_SetSys ...
- kettle工具的介绍和使用
kettle详解(数据抽取.转换.装载) 原文地址链接:https://blog.csdn.net/qq_35731570/article/details/71123413 一:下载路径 当你要学 ...
- PLSQL Developer、汉化包官方下载及注册码
1.官方下载地址 https://www.allroundautomations.com/registered/plsqldev.html 2.找到对应安装包和语言包 3.先安装PLSQL Devel ...
- 此项目与Visual Studio的当前版本不兼容的报错
问题再现:程序是用visual studio 2013开发的,放在本地运行报此项目与Visual Studio的当前版本不兼容.本地是visual studio 2010. 解决办法: <1&g ...
- 在浏览器输入 URL 回车之后发生了什么
注意:本文的步骤是建立在,请求的是一个简单的 HTTP 请求,没有 HTTPS.HTTP2.最简单的 DNS.没有代理.并且服务器没有任何问题的基础上. 大致流程 URL 解析 DNS 查询 TCP ...
- iframe内嵌页面——跨域通讯
<template> <div class="act-form"> <iframe :src="src" ref=" ...