题意

定义函数 f(x) = b^f(x-1) if x > 0, and f(0)=1。(a^b表示a的b次幂)
给定 b, i, n,求f(i) 的末n位

思路

首先末 n 位的意思就是 mod 10^n 嘛。所以这个函数就变成了一个同余意义下的递归幂运算了。当然是选择欧拉降幂公式啦。
但是应用欧拉降幂公式是由条件的:指数 e > phi(mod) 。直接套用公式的话,费了好大劲也没能想到怎么能判断这个条件,什么时候用降幂公式,什么时候不用。
打表法
把1e7以下的函数值暴力求出来,并打一个表fbx[b][x]。如果用到这些值,直接返回并取模就可以了。而剩下的没有求出来的,判断一下fbx[b][x-1]是不是大于 phi(mod) ,就可以判断是不是可以用降幂公式了。

另外,对于因为题目说是多组数据,所以每次算出答案后保存一下(mod 1e7)。

链接

http://poj.org/problem?id=2720

代码

#include<cstdio>
#include<iostream>
#include<cmath>
#include<iomanip>
#include<cstring>using namespace std;typedef long long LL;const int maxn = 1e7 + 10;
const int base[8] = {1, 10, 100, 1000, 10000, 100000, 1000000, 10000000};int b, x, n;
int fbx[110][110];//保存小于1e7的fb(x)
int tab[110][110];//保存mod1e7的答案//快速幂
LL quick_pow(int a, int b, int c)
{LL res = 1, t = a;while(b > 0){if(b & 1) res = (res * t) % c;t = (t * t) % c;b >>= 1;}return res;
}//计算phi(C)
LL get_phi(LL C)
{LL res = C;for(int i= 2; i * i <= C; i++){if(C % i == 0){res = res / i * (i - 1);while(C % i == 0) C /= i;}}if(C > 1) res = res / C * (C - 1);return res;
}int solve(int a, int mod){if(fbx[b][a] != -1) return fbx[b][a];//已有结果直接返回int phi = get_phi(mod);if(fbx[b][a-1] != -1 && fbx[b][a-1] <= phi)//指数较小或不满足欧拉降幂公式的条件return quick_pow(b, fbx[b][a-1], mod);//直接快速幂计算return quick_pow(b, solve(a-1, phi) + phi, mod);//运用欧拉降幂公式
}//计算小于1e7的fb(x)
int limit_pow(int a, int b){int res = 1;for(int i = 0; i < b; ++i){res *= a;if(res >= base[7]) return -1;}return res;
}//初始化 fbx 和 tab数组
void init(){memset(tab, -1, sizeof tab);memset(fbx, -1, sizeof fbx);for(int i = 1; i <= 100; ++i){for(int j = 0; j <= 100; ++j){tab[i][j] = fbx[i][j] = limit_pow(i, fbx[i][j-1]);if(tab[i][j] == -1) break;}}
}int main(){init();while(scanf("%d", &b) == 1 && b){if(b == 0) break;scanf("%d %d", &x, &n);int res;if(tab[b][x] == -1){tab[b][x] = solve(x, base[7]);//统一mod1e7计算并保存答案res = tab[b][x] % base[n];//之后再mod要求的模数}else{res = tab[b][x] % base[n];}cout << setfill('0') << setw(n) << res << endl;}return 0;
}

POJ2720_Last Digits_欧拉降幂公式打表相关推荐

  1. 欧拉φ函数和欧拉降幂公式

    欧拉φ函数:在数论中,对正整数n,欧拉函数是小于或等于n的正整数中与n互质的数的数目.此函数以其首名研究者欧拉命名,它又称为φ函数.欧拉商数等.φ(1)=1 C++实现: int GetEuler(i ...

  2. 逆元,欧拉降幂公式,二次剩余

    一.逆元 概念和作用 逆元其实跟倒数很相似. 逆元概念:方程 a x ≡ 1 ( m o d p ) ax\equiv 1(mod\, \: p) ax≡1(modp) 的解称为 a 关于模 p 的逆 ...

  3. 欧拉降幂(Euler_Power_Formula)

    一.欧拉降幂公式 二.证明 欧拉降幂公式与证明 三.例题 https://ac.nowcoder.com/acm/contest/330/E 四.参考文章 https://blog.csdn.net/ ...

  4. Summer Training day4 欧拉降幂

    Input 2 Output 2 Hint 1. For N = 2, S(1) = S(2) = 1.2. The input file consists of multiple test case ...

  5. 幂塔的计算 (欧拉降幂)

    形如以下式子的东西叫做幂塔: a a a a . . . a^{a^{a^{a^{...}}}} aaaa... 题目 给定 a , n , m a,n,m a,n,m,计算 a a a的 n n n ...

  6. 【2021牛客寒假第五场】C-比武招亲(下)欧拉降幂+多项式求逆预处理伯努利数计算等幂求和

    [2021牛客寒假第五场]C-比武招亲(下)欧拉降幂+多项式求逆预处理伯努利数计算等幂求和 前置技能 题意 思路 Code(715MS) 传送门: https://ac.nowcoder.com/ac ...

  7. 欧拉降幂及其扩展欧拉降幂

    欧拉降幂: 从公式来看,需要使用快速幂运算和欧拉函数 #include<bits/stdc++.h>using namespace std; typedef __int64 LL;cons ...

  8. 2019ICPC(南京) - super_log(欧拉降幂)

    题目链接:点击查看 题目大意:求(a^a^a^a....^a)%mod,其中有b个a 题目分析:一道数论题,被我们做成了模拟题..首先因为涉及到指数并且指数都还比较大,所以需要知道一个降幂公式: 我们 ...

  9. 数学--数论--欧拉降幂和广义欧拉降幂(实用好理解)

    一般大佬会给你证明,而菜鸟会教你怎么使用. 先摆上公式: ab≡{abmodϕ(p)gcd(a,p)=1abgcd(a,p)≠1,b<ϕ(p)abmodϕ(p)+ϕ(p)gcd(a,p)≠1,b ...

最新文章

  1. 利用动态加载模板,配合ajax实现无刷新操作
  2. 面试官问:Redis变慢了,你会怎么排查?
  3. C++编程进阶8(最好不要实现类型转换运算符、单形参的构造函数与类型转换、临时对象与RVO)
  4. mustache语法 转自小花大方
  5. fatal error LNK1181: 无法打开输入文件“libx264.lib”
  6. 易语言利用服务器更新,易语言使用FTP服务器更新软件案例
  7. leetcode337. 打家劫舍 III
  8. linux中可以安装不同版本的gcc么,在linux下安装多个版本的GCC
  9. S3C2440扩展SDRAM
  10. SQL Server 索引和表体系结构(三)
  11. Java 网络编程(二) 两类传输协议:TCP UDP
  12. PP视频如何设置默认缓存个数
  13. 问题三十八:C++中bad alloc问题(2)——使用“引用”避免该问题
  14. TimeLine下载地址
  15. 立体几何相关公式推导理解(球体、台体体积)
  16. matlab图片测量尺寸_matlab尺寸测量
  17. 计算机局域网络硬件组成,计算机基础知识:局域网网络硬件的组成
  18. PHP的strtolower()和strtoupper()函数在安装非中文系统的服务器下可能会导致将汉字转换为乱码,请写两个替代的函数实现兼容Unicode文字的字符串大小写转换
  19. 区块链中的节点是什么意思?
  20. 2009最新山东省百强企业排名

热门文章

  1. 黑客入门很难吗?这一篇保证你学的明明白白
  2. 《人性的弱点》第二章:故事总结
  3. AutoSAR系列讲解(入门篇)3.5-RTE对数据一致性的管理
  4. D. CGCDSSQ (gcdST表)
  5. 基于C#的SW二次开发
  6. cs linux服务器ip,linux安装CS服务器详解
  7. Parity(带权值的并查集)
  8. [siggraph2011]Secrets of CryENGINE 3 Graphics Technology
  9. 全国SHP地图数据赠送
  10. html5 判断获取定位,HTML5利用Geolocation API获取地理位置定位功能