XMU 1615 刘备闯三国之三顾茅庐(三) 【欧拉函数+快速幂+欧拉定理】
1615: 刘备闯三国之三顾茅庐(三)
Time Limit: 1000 MS Memory Limit: 128 MB
Submit: 45 Solved: 8
[Submit][Status][Web Board]Description
刘备(161年-223年6月10日),字玄德,东汉末年幽州涿郡涿县,西汉中山靖王刘胜的后代。刘备一生极具传奇色彩,早年颠沛流离、备尝艰辛最终却凭借自己的谋略终成一方霸主。那么在那个风云激荡的年代,刘备又是如何从一个卖草鞋的小人物一步一步成为蜀汉的开国皇帝呢?让我们一起拨开历史的迷雾,还原一个真实的刘备。
公元207年冬至,当时驻军新野的刘备在徐庶的建议下,到南阳卧龙岗拜访诸葛亮。这是刘备第三次拜访诸葛亮的故事。据三国演义记载,此次刘备终于拜访到了诸葛亮,诸葛亮献上草庐对策,为诸葛亮描述了一个良好的战略远景。然而据我翻阅古籍发现:诸葛亮本人其实精通数论,他终于发现前面的题目太简单了,于是给刘备甩下了这么一道题,这是他最新的研究成果:
题目意思很简单:
已知:f(1)=1; f(k)=k^f(k-1),求f(n)%m。
刘备为人深谋远虑,但对此类问题只能急得干瞪眼,请出诸葛亮事关大业,所以聪明的你自告奋勇,抄起纸笔开始计算了。
Input
有多组数据,需处理到文件结束(EOF):
每组数据包含两个整数n,m(1<=n,m<=10^9)
Output
对于每一组数据:
输出一个整数,f(n)%m的值
Sample Input
2 42
5 123456789
94 265Sample Output
2
16317634
39HINT
Source
题目链接:
http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1615
题目大意:
f(1)=1; f(k)=k^f(k-1),求f(n)%m。
题目思路:
【欧拉函数+快速幂+欧拉定理】
定理:a^b mod c = a^(b%phi[c]+phi[c]) mod c,其中要满足b >= phi[c]。(phi为欧拉函数)
由题目可以知道这题f(n)=n^(n-1)^(n-2)^...^2^1。由于是指数级的,f(5)就已经超出longlong范围。所以试用上面的定理优化。
由于指数只有在4^3^2^1或更小的情况下才有可能<phi[c],所以特殊处理这四个值,其余可以递归求解。
需要log求解欧拉函数,log求快速幂,递归调用求解函数直至取模的数=1或指数下降到可以直接求的范围。
/****************************************************
Author : Coolxxx
Copyright 2017 by Coolxxx. All rights reserved.
BLOG : http://blog.csdn.net/u010568270
****************************************************/
#include<bits/stdc++.h>
#pragma comment(linker,"/STACK:1024000000,1024000000")
#define abs(a) ((a)>0?(a):(-(a)))
#define lowbit(a) (a&(-a))
#define sqr(a) ((a)*(a))
#define mem(a,b) memset(a,b,sizeof(a))
const double EPS=1e-;
const int J=;
const int MOD=;
const int MAX=0x7f7f7f7f;
const double PI=3.14159265358979323;
const int N=;
const int M=;
using namespace std;
typedef long long LL;
double anss;
LL aans;
int cas,cass;
LL n,m,lll,ans;
LL euler(LL x)
{
LL res=x;
int i;
for(i=;1LL*i*i<=x;i++)
{
if(x%i==)
{
res=res/i*(i-);
while(x%i==)x/=i;
}
}
if(x>)res=res/x*(x-);
return res;
}
LL mi(LL x,LL y,LL mod)
{
LL s=;
while(y)
{
if(y&)s=(s*x)%mod;
y/=;
x=(x*x)%mod;
}
return s;
}
LL cal(LL a,LL c)
{
LL e=euler(c);
if(a== && e>)return %c;
if(a== && e>)return %c;
if(a==)return ;
if(c==)return ;
LL b=cal(a-,e);
return (1LL*mi(a,b,c)*mi(a,e,c))%c;
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("1.txt","r",stdin);
// freopen("2.txt","w",stdout);
#endif
int i,j,k;
int x,y,z;
// for(scanf("%d",&cass);cass;cass--)
// for(scanf("%d",&cas),cass=1;cass<=cas;cass++)
// while(~scanf("%s",s))
while(~scanf("%lld",&n))
{
scanf("%lld",&m);
printf("%lld\n",cal(n,m));
}
return ;
}
/*
//
//
*/
XMU 1615 刘备闯三国之三顾茅庐(三) 【欧拉函数+快速幂+欧拉定理】的更多相关文章
- XMU 1614 刘备闯三国之三顾茅庐(二) 【逆向思维+二维并查集】
1614: 刘备闯三国之三顾茅庐(二) Time Limit: 1000 MS Memory Limit: 128 MBSubmit: 15 Solved: 5[Submit][Status][W ...
- XMU 1613 刘备闯三国之三顾茅庐(一) 【并查集】
1613: 刘备闯三国之三顾茅庐(一) Time Limit: 1000 MS Memory Limit: 128 MBSubmit: 99 Solved: 29[Submit][Status][ ...
- XMU 1612 刘备闯三国之桃园结义 【二分】
1612: 刘备闯三国之桃园结义 Time Limit: 1000 MS Memory Limit: 128 MBSubmit: 181 Solved: 12[Submit][Status][We ...
- XMU 1617 刘备闯三国之汉中之战 【BFS+染色】
1617: 刘备闯三国之汉中之战 Time Limit: 1000 MS Memory Limit: 128 MBSubmit: 6 Solved: 5[Submit][Status][Web B ...
- XMU 1611 刘备闯三国之卖草鞋 【贪心】
1611: 刘备闯三国之卖草鞋 Time Limit: 1000 MS Memory Limit: 64 MBSubmit: 90 Solved: 48[Submit][Status][Web B ...
- POJ2154 Color【 polya定理+欧拉函数优化】(三个例题)
由于这是第一天去实现polya题,所以由易到难,先来个铺垫题(假设读者是看过课件的,不然可能会对有些“显然”的地方会看不懂): 一:POJ1286 Necklace of Beads :有三种颜色,问 ...
- GDUFE-OJ 1203x的y次方的最后三位数 快速幂
嘿嘿今天学了快速幂也~~ Problem Description: 求x的y次方的最后三位数 . Input: 一个两位数x和一个两位数y. Output: 输出x的y次方的后三位数. Sample ...
- 受限玻尔兹曼机(RBM)学习笔记(三)能量函数和概率分布
去年 6 月份写的博文<Yusuke Sugomori 的 C 语言 Deep Learning 程序解读>是囫囵吞枣地读完一个关于 DBN 算法的开源代码后的笔记,当时对其中涉及的算 ...
- html年月日下拉联动菜单 年月日三下拉框联动
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
随机推荐
- Android获取屏幕大小(Px)
private DisplayMetrics dm = new DisplayMetrics(); TextView tv; Button bu; @Override protected void o ...
- 关于markdown 的简单使用(已更新)
markdown的介绍 Markdown是一种可以使用普通文本编辑器编写的标记语言,通过类似HTML的标记语法,它可以使普通文本内容具有一定的格式. Markdown具有一系列衍生版本,用于扩展Mar ...
- 刁肥宅详解中缀表达式求值问题:C++实现顺序/链栈解决
1. 表达式的种类 如何将表达式翻译成能够正确求值的指令序列,是语言处理程序要解决的基本问题,作为栈的应用事例,下面介绍表达式的求值过程. 任何一个表达式都是由操作数(亦称运算对象).操作符(亦称运算 ...
- 自定义UDF函数应用异常
自定义UDF函数应用异常 版权声明:本文为yunshuxueyuan原创文章.如需转载请标明出处: http://www.cnblogs.com/sxt-zkys/QQ技术交流群:299142667 ...
- hihoCoder#1141 二分·归并排序之逆序对
原题地址 又是一道WA成狗的题,最后发现原来是结果溢出了.. 代码: #include <iostream> #include <cstring> using namespac ...
- bzoj5106 [CodePlus2017]汀博尔 二分
[CodePlus2017]汀博尔 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 202 Solved: 75[Submit][Status][Di ...
- BZOJ1733: [Usaco2005 feb]Secret Milking Machine 神秘的挤奶机
n<=200个点m<=40000条边无向图,求 t次走不经过同条边的路径从1到n的经过的边的最大值 的最小值. 最大值最小--二分,t次不重边路径--边权1的最大流. #inclu ...
- linux下reboot和shutdown关机命令详解
我 们在操作Linux v/服务器的时候肯定会有需要重启系统,或者关闭系统等操作.有些用户是直接到VPS主机商家面板上操作的,这样一来比较麻烦,二来有些面板还不易于使用 容易导致面板卡死.所以最好的方 ...
- Junit中Assert.assertEquals()和Assert.assertSame方法有什么异同
1)提供的接口数量不完全相同.assertEquals支持boolean,long,int等等java primitiveType变量.assertSame只支持Object. 2)比较的逻辑不同,结 ...
- Spring基于注解的配置概述
以下内容引用自http://wiki.jikexueyuan.com/project/spring/annotation-based-configuration.html: 从Spring 2.5开始 ...
