BZOJ3884题解上帝与集合的正确用法--扩展欧拉定理
题目链接
https://www.lydsy.com/JudgeOnline/problem.php?id=3884
分析
扩展欧拉定理裸题
欧拉定理及证明:
如果\((a,m)=1\),则\(a^{\phi(m)} \equiv 1 \mod m\)
\(Prove:\)设\(x\)取遍\(m\)的缩系,则\(ax\)取遍\(m\)的缩系,即
\[\prod x = \prod ax \mod m
\]因为这样的\(a\)有\(\phi(m)\)个
\[\prod x = \prod x *a^{ \phi(m)} \mod m
\]由于\((x,m)=1\),保证\(\prod x\) 存在模\(m\)意义下的逆元
所以 $$a^{ \phi(m)} \equiv 1 \mod m$$
扩展欧拉定理:
如果 $$(a,m)!=1$$
则 $$a^b \equiv a^{min(b,b % \phi(m)+\phi(m))} \mod m$$设\(f(x)\)为在模\(x\)意义下题目式子的值,那么$$f(x)=2{2{^{...}}%\phi(x)+\phi(x)} \mod x=2^{f(\phi(x))+\phi(x)} \mod x$$
然后就可以记忆化搞一搞了
注意
求欧拉函数可以线性预处理也可以直接求,实践证明直接求不知道快到哪里去了
代码:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <cctype>
#define ll long long
#define ri register int
using std::sort;
template <class T>inline void read(T &x){
x=0;int ne=0;char c;
while(!isdigit(c=getchar()))ne=c=='-';
x=c-48;
while(isdigit(c=getchar()))x=(x<<3)+(x<<1)+c-48;
x=ne?-x:x;return ;
}
const int maxn=10000005;
const int inf=0x7fffffff;
int t,n;
int mem[maxn];
int phi[maxn];
bool vis[maxn];
inline void get_table(){
bool is_pri[maxn];
int num[1000005],tot=0,tmp;
memset(is_pri,0,sizeof(is_pri));
is_pri[1]=1;
phi[1]=1;
for(ri i=2;i<=maxn;i++){
//printf("%d\n",i);
if(!is_pri[i]){
num[++tot]=i;
phi[i]=i-1;
}
for(ri j=1;j<=tot;j++){
tmp=num[j]*i;
if(tmp>=maxn)break;
is_pri[tmp]=1;
if(i%num[j]==0){
phi[tmp]=num[j]*phi[i];
break;
}
else {
phi[tmp]=(num[j]-1)*phi[i];
}
}
}
return ;
}
inline int get_phi(int x){
int res=x;
for(ri i=2;i*i<=n;i++){
if(x%i==0){
res=res/i*(i-1);
while(x%i==0)x=x/i;
}
}
if(x>1)res=res/x*(x-1);
return res;
}
int ksm(ll x,int c,int p){
ll ans=1,res=x;
while(c){
if(c&1)ans=ans*res%p;
res=res*res%p;
c=c>>1;
}
return ans%p;
}
int f(int x){
if(x==1)return 0;
if(vis[x])return mem[x];
int p=phi[x];//int p=get_phi(x);
vis[x]=1;
mem[x]=ksm(2,f(p)+p,x);
return mem[x];
}
int main(){
read(t);
get_table();
while(t--){
read(n);
printf("%d\n",f(n));
}
return 0;
}
BZOJ3884题解上帝与集合的正确用法--扩展欧拉定理的更多相关文章
- 【bzoj3884】上帝与集合的正确用法 扩展欧拉定理
题目描述 根据一些书上的记载,上帝的一次失败的创世经历是这样的: 第一天, 上帝创造了一个世界的基本元素,称做“元”. 第二天, 上帝创造了一个新的元素,称作“α”.“α”被定义为“元”构成的集合.容 ...
- 【BZOJ3884】上帝与集合的正确用法(欧拉定理,数论)
[BZOJ3884]上帝与集合的正确用法(欧拉定理,数论) 题面 BZOJ 题解 我们有欧拉定理: 当\(b \perp p\)时 \[a^b≡a^{b\%\varphi(p)}\pmod p \] ...
- 洛谷P4139 上帝与集合的正确用法 [扩展欧拉定理]
题目传送门 上帝与集合的正确用法 题目描述 根据一些书上的记载,上帝的一次失败的创世经历是这样的: 第一天, 上帝创造了一个世界的基本元素,称做“元”. 第二天, 上帝创造了一个新的元素,称作“α”. ...
- bzoj3884: 上帝与集合的正确用法 扩展欧拉定理
题意:求\(2^{2^{2^{2^{...}}}}\%p\) 题解:可以发现用扩展欧拉定理不需要很多次就能使模数变成1,后面的就不用算了 \(a^b\%c=a^{b\%\phi c} gcd(b,c) ...
- 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; ...
- 【BZOJ3884】上帝与集合的正确用法 [欧拉定理]
上帝与集合的正确用法 Time Limit: 5 Sec Memory Limit: 128 MB[Submit][Status][Discuss] Description Input 第一行一个T ...
- BZOJ3884: 上帝与集合的正确用法 拓展欧拉定理
Description 根据一些书上的记载,上帝的一次失败的创世经历是这样的: 第一天, 上帝创造了一个世界的基本元素,称做“元”. 第二天, 上帝创造了一个新的元素,称作“α”.“α”被定义为“ ...
- 【bzoj3884】 上帝与集合的正确用法
http://www.lydsy.com/JudgeOnline/problem.php?id=3884 (题目链接) 题意 求 Solution 解决的关键: 当${n>φ(p)}$,有$${ ...
随机推荐
- ElasticSearch3:RestAPI
1.设置分片数和副本数 es7默认主分片数和主分片副本数都为1,通过 default_template 指定分片数 PUT http://192.168.8.101:9200/_template/de ...
- laravel 链式组合查询数据
laravel 链式组合查询数据 一.总结 一句话总结: - 就是链式操作的基本操作,因为返回的都是一直可以进行链式操作的对象,所以我们接收返回的对象即可 - $result = DB::table( ...
- [java]取当前平台默认字符集,取字符串长度
public class TimestampLength { public static void main(String[] args) { System.out.println(java.nio. ...
- jwt扩展
1.新建扩展类 package com.ireciting.uaaservice.config; import com.ireciting.uaaservice.pojo.TUser; import ...
- git 将本地项目关联到远程仓库
初始化 在本地需要关联到远程仓库的项目根目录下执行 git init 然后关联远程仓库 [project].你需要存在一个远程仓库,名字随意,然后执行下面的命令(去掉中括号)就可以关联到该仓库. gi ...
- NoSQL的种类
https://www.zhihu.com/question/30219620
- nginx的负载均衡和反向代理
本文介绍一些负载均衡和反向代理的一些基本概念,然后介绍如何基于nginx实现,包括两种安装nginx的方法:yum安装和源码安装,以及ngix该如何配置等. 什么是负载均衡? 概念 负载均衡是高可用网 ...
- Spring Cloud(0):目录
Spring Cloud(1):概览 Spring Cloud(2):服务发现(Eureka) Spring Cloud(3):配置服务(Config) Spring Cloud(4):断路器(Hys ...
- git学习教程二之远程仓库学习
首先你需要注册一个github用户名,我的github账户是:1654218052@qq.com 由于本地的git仓库和github的仓库是通过SSH加密的,所以我们还需要设置一点东西哦 第1步:创建 ...
- STS MVC与MyBatis的结合
1. MVC关键点在于Controller 1.1 Controller通过返回两种类型的数据完成用户端请求的回复:一种是模型(视图),另一种是JSON数据. 1.2 Controller类采用@Co ...