[洛谷P4139]上帝与集合的正确用法
题目大意:多次询问,每次给你$p$询问$2^{2^{2^{\dots}}}\bmod p$
题解:扩展欧拉定理,求出$\varphi(p)$即可。因为$2^{2^{2^{\dots}}}>>p$,所以其实每一次算的时候都可以直接加上$\varphi(p)$,不用判断
卡点:无
C++ Code:
#include <cstdio>
namespace Math {
const int N = 1e7 + 1;
int pri[N], ptot, phi[N];
bool notp[N];
inline void sieve() {
phi[1] = 1;
for (int i = 2; i < N; i++) {
if (!notp[i]) phi[pri[ptot++] = i] = i - 1;
for (int j = 0, t; j < ptot && (t = i * pri[j]) < N; j++) {
notp[t] = true;
if (i % pri[j] == 0) {
phi[t] = phi[i] * pri[j];
break;
}
phi[t] = phi[i] * phi[pri[j]];
}
}
}
inline long long pw(int b, int p, const int mod) {
long long res = 1, base = b, tmp = 0;
for (; p; p >>= 1) {
if (p & 1) {
res = res * base;
if (res >= mod) tmp = mod, res %= mod;
}
base = base * base;
if (base >= mod && p >> 1) tmp = mod, base %= mod;
}
return res + tmp;
}
}
using Math::phi;
int Tim, p;
long long solve(int p) {
if (p == 1) return p;
return Math::pw(2, solve(phi[p]), p);
}
int main() {
Math::sieve();
scanf("%d", &Tim);
while (Tim --> 0) {
scanf("%d", &p);
printf("%lld\n", solve(p) % p);
}
return 0;
}
[洛谷P4139]上帝与集合的正确用法的更多相关文章
- 洛谷 P4139 上帝与集合的正确用法 解题报告
P4139 上帝与集合的正确用法 题目描述 根据一些书上的记载,上帝的一次失败的创世经历是这样的: 第一天, 上帝创造了一个世界的基本元素,称做"元". 第二天, 上帝创造了一个新 ...
- 洛谷P4139 上帝与集合的正确用法 [扩展欧拉定理]
题目传送门 上帝与集合的正确用法 题目描述 根据一些书上的记载,上帝的一次失败的创世经历是这样的: 第一天, 上帝创造了一个世界的基本元素,称做“元”. 第二天, 上帝创造了一个新的元素,称作“α”. ...
- 题解-洛谷P4139 上帝与集合的正确用法
上帝与集合的正确用法 \(T\) 组数据,每次给定 \(p\),求 \[\left(2^{\left(2^{\left(2^{\cdots}\right)}\right)}\right)\bmod p ...
- 洛谷 P4139 上帝与集合的正确用法
题目描述 根据一些书上的记载,上帝的一次失败的创世经历是这样的: 第一天, 上帝创造了一个世界的基本元素,称做“元”. 第二天, 上帝创造了一个新的元素,称作“α”.“α”被定义为“元”构成的集合.容 ...
- 洛谷P4139 上帝与集合的正确用法 拓欧
正解:拓展欧拉定理 解题报告: 首先放上拓欧公式? if ( b ≥ φ(p) ) ab ≡ ab%φ(p)+φ(p)(mod p)else ab≡ab mod φ(p) (mod p) 首先利用扩 ...
- 【洛谷】P4139 上帝与集合的正确用法
题目描述 根据一些书上的记载,上帝的一次失败的创世经历是这样的: 第一天,上帝创造了一个世界的基本元素,称做“元”. 第二天,上帝创造了一个新的元素,称作“α”.“α”被定义为“元”构成的集合.容 ...
- P4139 上帝与集合的正确用法
本题是欧拉定理的应用.我这种蒟蒻当然不知道怎么证明啦! 那么我们就不证明了,来直接看结论: ab≡⎧⎩⎨⎪⎪ab%φ(p)abab%φ(p)+φ(p)gcd(a,p)=1gcd(a,p)≠1,b< ...
- Luogu P4139 上帝与集合的正确用法【扩展欧拉定理】By cellur925
题目传送门 题目中的式子很符合扩展欧拉定理的样子.(如果你还不知扩展欧拉定理,戳).对于那一堆糟心的2,我们只需要递归即可,递归边界是模数为1. 另外,本题中好像必须要用快速乘的样子...否则无法通过 ...
- luogu P4139 上帝与集合的正确用法(扩展欧拉定理)
本蒟蒻现在才知带扩展欧拉定理. 对于任意的\(b\geq\varphi(p)\)有 \(a^b\equiv a^{b\ mod\ \varphi(p)+\varphi(p)}(mod\ p)\) 当\ ...
随机推荐
- underscore.js 分析 第一天
Underscore 是一个非常实用的Javascript类库. 通过研究他能提高自身的JS水平. 我们看到整个代码被 (function() { /* 代码 */ }.call(this)); 包 ...
- L010 linux命令及基础手把手实战总结
一转眼都快两周没更新了,最近实在太忙了,这两周的时间断断续续的把L010学完了,短短的15节课,确是把前10节的课程全部的运用一遍,从笔记到整理,再到重新理解,最后发布到微博,也确实提升了一些综合性能 ...
- 翻译:利用GDAL生成cogeoff文件
翻译自: Introducing the AWS Lambda Tiler https://hi.stamen.com/stamen-aws-lambda-tiler-blog-post-76fc11 ...
- Django自定义管理表单
修改polls/admin.py: from django.contrib import admin from .models import Choice, Question class Choice ...
- C++11 type_traits 之is_convertible源码分析
请看源码: struct __sfinae_types { typedef char __one; typedef ]; } __two; }; template<typename _From, ...
- SqlServer的两种插入方式效率对比
protected void button1_Click(object sender, EventArgs e) { DataTable dtSource = new DataTable(); dtS ...
- TW实习日记:第22天
今天开发项目的还没完成的功能点,没什么难的,样式复制粘贴,JSON表单配一配,接口调一调,基本就完成了.不过中间在写后台的一些接口时,发现被自己之前写的一些方法给坑了.为什么这样说呢,因为在之前的几个 ...
- python中的迭代器与生成器
迭代器 迭代器的引入 假如我现在有一个列表l=['a','b','c','d','e'],我想取列表中的内容,那么有几种方式? 1.通过索引取值 ,如了l[0],l[1] 2.通过for循环取值 fo ...
- 深入理解eos账户体系 active和action
在eos中,账户是一个非常重要的概念. 账户分为两部分组成 一种是active 一种是action. 智能合约本质上来讲就是一个action加上一个回馈脚本程序.任何智能合约都有这俩个部分组成. 那么 ...
- Python3 Tkinter-Spinbox
1.创建 from tkinter import * root=Tk() Spinbox(root).pack() root.mainloop() 2.参数 from_ 最小值 to 最大 ...