POJ2720_Last Digits_欧拉降幂公式打表
题意
定义函数 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_欧拉降幂公式打表相关推荐
- 欧拉φ函数和欧拉降幂公式
欧拉φ函数:在数论中,对正整数n,欧拉函数是小于或等于n的正整数中与n互质的数的数目.此函数以其首名研究者欧拉命名,它又称为φ函数.欧拉商数等.φ(1)=1 C++实现: int GetEuler(i ...
- 逆元,欧拉降幂公式,二次剩余
一.逆元 概念和作用 逆元其实跟倒数很相似. 逆元概念:方程 a x ≡ 1 ( m o d p ) ax\equiv 1(mod\, \: p) ax≡1(modp) 的解称为 a 关于模 p 的逆 ...
- 欧拉降幂(Euler_Power_Formula)
一.欧拉降幂公式 二.证明 欧拉降幂公式与证明 三.例题 https://ac.nowcoder.com/acm/contest/330/E 四.参考文章 https://blog.csdn.net/ ...
- 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 ...
- 幂塔的计算 (欧拉降幂)
形如以下式子的东西叫做幂塔: a a a a . . . a^{a^{a^{a^{...}}}} aaaa... 题目 给定 a , n , m a,n,m a,n,m,计算 a a a的 n n n ...
- 【2021牛客寒假第五场】C-比武招亲(下)欧拉降幂+多项式求逆预处理伯努利数计算等幂求和
[2021牛客寒假第五场]C-比武招亲(下)欧拉降幂+多项式求逆预处理伯努利数计算等幂求和 前置技能 题意 思路 Code(715MS) 传送门: https://ac.nowcoder.com/ac ...
- 欧拉降幂及其扩展欧拉降幂
欧拉降幂: 从公式来看,需要使用快速幂运算和欧拉函数 #include<bits/stdc++.h>using namespace std; typedef __int64 LL;cons ...
- 2019ICPC(南京) - super_log(欧拉降幂)
题目链接:点击查看 题目大意:求(a^a^a^a....^a)%mod,其中有b个a 题目分析:一道数论题,被我们做成了模拟题..首先因为涉及到指数并且指数都还比较大,所以需要知道一个降幂公式: 我们 ...
- 数学--数论--欧拉降幂和广义欧拉降幂(实用好理解)
一般大佬会给你证明,而菜鸟会教你怎么使用. 先摆上公式: ab≡{abmodϕ(p)gcd(a,p)=1abgcd(a,p)≠1,b<ϕ(p)abmodϕ(p)+ϕ(p)gcd(a,p)≠1,b ...
最新文章
- 利用动态加载模板,配合ajax实现无刷新操作
- 面试官问:Redis变慢了,你会怎么排查?
- C++编程进阶8(最好不要实现类型转换运算符、单形参的构造函数与类型转换、临时对象与RVO)
- mustache语法 转自小花大方
- fatal error LNK1181: 无法打开输入文件“libx264.lib”
- 易语言利用服务器更新,易语言使用FTP服务器更新软件案例
- leetcode337. 打家劫舍 III
- linux中可以安装不同版本的gcc么,在linux下安装多个版本的GCC
- S3C2440扩展SDRAM
- SQL Server 索引和表体系结构(三)
- Java 网络编程(二) 两类传输协议:TCP UDP
- PP视频如何设置默认缓存个数
- 问题三十八:C++中bad alloc问题(2)——使用“引用”避免该问题
- TimeLine下载地址
- 立体几何相关公式推导理解(球体、台体体积)
- matlab图片测量尺寸_matlab尺寸测量
- 计算机局域网络硬件组成,计算机基础知识:局域网网络硬件的组成
- PHP的strtolower()和strtoupper()函数在安装非中文系统的服务器下可能会导致将汉字转换为乱码,请写两个替代的函数实现兼容Unicode文字的字符串大小写转换
- 区块链中的节点是什么意思?
- 2009最新山东省百强企业排名
热门文章
- 黑客入门很难吗?这一篇保证你学的明明白白
- 《人性的弱点》第二章:故事总结
- AutoSAR系列讲解(入门篇)3.5-RTE对数据一致性的管理
- D. CGCDSSQ (gcdST表)
- 基于C#的SW二次开发
- cs linux服务器ip,linux安装CS服务器详解
- Parity(带权值的并查集)
- [siggraph2011]Secrets of CryENGINE 3 Graphics Technology
- 全国SHP地图数据赠送
- html5 判断获取定位,HTML5利用Geolocation API获取地理位置定位功能