【BZOJ3884】上帝与集合的正确用法 [欧拉定理]
上帝与集合的正确用法
Time Limit: 5 Sec  Memory Limit: 128 MB
[Submit][Status][Discuss]
Description

Input
Output
Sample Input
2
3
6
Sample Output
1
4
HINT
Solution
我们运用欧拉定理:

然后还有一个定理:一个数在执行log次操作后,值不会改变。
然后就可以直接求了。
Code
#include<iostream>
#include<string>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
using namespace std;
typedef long long s64; const int ONE = ;
const int INF = ; int T,x;
int phi[ONE],pn; int get()
{
int res=,Q=;char c;
while( (c=getchar())< || c> )
if(c=='-')Q=-;
res=c-;
while( (c=getchar())>= && c<= )
res=res*+c-;
return res*Q;
} int Quickpow(int a,int b,int MOD)
{
int res = ;
while(b)
{
if(b & ) res = (s64)res * a % MOD;
a = (s64)a * a % MOD;
b >>= ;
}
return res;
} int Getphi(int n)
{
int res = n;
for(int i=; i*i<=n; i++)
if(n % i == )
{
res = res/i*(i-);
while(n % i == ) n /= i;
}
if(n != ) res = res/n*(n-);
return res;
} int Deal(int p)
{
pn = ; phi[] = p;
while(p != ) phi[++pn] = p = Getphi(p);
phi[++pn] = ; int a = ;
for(int i=pn; i>=; i--)
{
if(a >= phi[i]) a = a%phi[i] + phi[i];
a = (s64)Quickpow(, a, phi[i-]);
if(!a) a = phi[i-];
} return a % phi[];
} int main()
{
T = get();
while(T--)
{
x = get();
printf("%d\n", Deal(x));
}
}
【BZOJ3884】上帝与集合的正确用法 [欧拉定理]的更多相关文章
- BZOJ3884: 上帝与集合的正确用法  拓展欧拉定理
		Description 根据一些书上的记载,上帝的一次失败的创世经历是这样的: 第一天, 上帝创造了一个世界的基本元素,称做“元”. 第二天, 上帝创造了一个新的元素,称作“α”.“α”被定义为“ ... 
- BZOJ3884: 上帝与集合的正确用法(欧拉函数 扩展欧拉定理)
		Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 3860 Solved: 1751[Submit][Status][Discuss] Descripti ... 
- bzoj3884: 上帝与集合的正确用法 扩展欧拉定理
		题意:求\(2^{2^{2^{2^{...}}}}\%p\) 题解:可以发现用扩展欧拉定理不需要很多次就能使模数变成1,后面的就不用算了 \(a^b\%c=a^{b\%\phi c} gcd(b,c) ... 
- BZOJ3884 上帝与集合的正确用法  【欧拉定理】
		题目 对于100%的数据,T<=1000,p<=10^7 题解 来捉这道神题 欧拉定理的一般形式: \[a^{m} \equiv a^{m \mod \varphi(p) + [m \ge ... 
- bzoj3884上帝与集合的正确用法
		Description 根据一些书上的记载,上帝的一次失败的创世经历是这样的: 第一天, 上帝创造了一个世界的基本元素,称做“元”. 第二天, 上帝创造了一个新的元素,称作“α”.“α”被定义为“ ... 
- [BZOJ3884] 上帝与集合的正确用法 (欧拉函数)
		题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=3884 题目大意: 给出 M, 求 $2^{2^{2^{2^{...}}}}$ % M ... 
- bzoj3884 上帝与集合的正确用法
		a^b mod P=a^(b mod phi(p)) mod p,利用欧拉公式递归做下去. 代码 #pragma comment(linker,"/STACK:1024000000,1024 ... 
- bzoj3884: 上帝与集合的正确用法 欧拉降幂公式
		欧拉降幂公式:http://blog.csdn.net/acdreamers/article/details/8236942 糖教题解处:http://blog.csdn.net/skywalkert ... 
- bzoj千题计划264:bzoj3884: 上帝与集合的正确用法
		http://www.lydsy.com/JudgeOnline/problem.php?id=3884 欧拉降幂公式 #include<cmath> #include<cstdio ... 
随机推荐
- gcc与g++区别以及相关参数详解
			---恢复内容开始--- 原文链接:g++和gcc的区别 一 .二者区别 gcc和g++都是GNU(一个组织)的编译器. 1.对于.c后缀的文件,gcc把它当做是C程序:g++当做是C++程序: 2. ... 
- Linux上安装MySQL - 12条命令搞定MySql
			从零开始安装mysql数据库 : 按照该顺序执行 : a. 查看是否安装有mysql:yum list installed mysql*, 如果有先卸载掉, 然后在进行安装; b. 安装mysql客 ... 
- 【IdentityServer4文档】- 支持协议
			IdentityServer 实现了以下协议: OpenID Connect OpenID Connect Core 1.0 (spec) OpenID Connect Discovery 1.0 ( ... 
- JAVA单态设计模式
			核心--在类的内部把构造器私有化,同时在内部产生对象,并通过类.静态方法(static)返回实例化对象的引用 设计模式是在大量的实践总结和理论化之后优选的代码结果,编程风格,以及解决问题的思考方式 ... 
- ubuntu中下载sublime相关问题
			1.SublimeText3的安装 在网上搜索了一些ubuntu下关于sublime-text-3安装的方法,在这里针对自己尝试的情况进行反馈: 方法一(未成功): 在终端输入以下代码: sudo a ... 
- 华为oj----iNOC产品部-杨辉三角的变形 .
			此题提供三种方法,第一种,一开始就能想到的,设置一个足够大的数组存储生成的杨辉三角,然后进行判断就行,此方法参见:华为oj iNOC产品部-杨辉三角的变形 另一种方法是采用递归: 三角形的每行的个数为 ... 
- 【Docker 命令】- create命令
			docker create :创建一个新的容器但不启动它 语法 docker create [OPTIONS] IMAGE [COMMAND] [ARG...] OPTIONS同run命令 实例 使用 ... 
- Jenkins系列-Jenkins初始化配置
			初始化 访问,如:127.0.0.1:8088/Jenkins 第一次要求输入密码,初始密码在文件中查看. 执行以下命令查看 $ cat ${USER_HOME}\.jenkins\secrets\i ... 
- phpcms退出 提示  :退出成功0 。 的解决办法
			打开/phpcms/modules/member/index.php 搜索如下代码: showmessage(L('logout_success').$synlogoutstr, $forward); ... 
- 【刷题】BZOJ 4698 Sdoi2008 Sandy的卡片
			Description Sandy和Sue的热衷于收集干脆面中的卡片.然而,Sue收集卡片是因为卡片上漂亮的人物形象,而Sandy则是为了积攒卡片兑换超炫的人物模型.每一张卡片都由一些数字进行标记,第 ... 
