【2021牛客寒假算法基础集训营1】H 幂塔个位数的计算(欧拉降幂)

幂塔个位数的计算

https://ac.nowcoder.com/acm/contest/9981/H

虽然可以找规律,但是太难了Orz蒟蒻只能选择欧拉降幂。
我们先来看下扩展欧拉定理:
oiwiki
截自oiwiki

欧拉降幂就是用第三条式子来降低幂次,方便计算的。
PS:这里为什么不会出现第二条式子的情况?我大概算了下,a取1的情况我们会特判掉,a取2以上大概就不会发现第二条式子的情况了。所以,不需要考虑第二条式子。
UPD:保险起见,我还是加了判断是否使用第二条式子的部分。
例如,我们按照样例1:
我们要求的其实就是:


而如果层数再多:任何数mod 1都为0,直接返回0即可。这可能也是存在规律的依据。
大数,写python呀!

from math import log
def phi(x):
    if x == 10:
        return 4
    if x == 4:
        return 2
    if x == 2:
        return 1
    if x == 1:
        return 1


def cal(a, n, mod):
    if (mod == 1):
        return 1
    if n == 1:
        return a % mod + mod
    save=cal(a, n - 1, phi(mod))
    res=pow(a, cal(a, n - 1, phi(mod)), mod)
    if(save*log(a)<log(mod)):
        return res
    return res + mod


a = int(input())
n = int(input())
if (n == 1):
    print(a % 10)
else:
    print(pow(a, cal(a, n - 1, phi(10)), 10))
全部评论
菜鸡有几个问题想问一下dalao: 1.文中说,"欧拉降幂就是用第三条式子来降低幂次",为什么你下面举的例子里面,并没有用到第三个式子,而是用到了第一个式子。 2.既然用到第1个式子,那如何保证每次进行欧拉降幂的时候,都一定有gcd(a,p)=1成立呢?
点赞 回复 分享
发布于 2021-02-16 18:49
那这样子的话,例子里面,a=3,p=10,gcd(a,p)=1,不能使用第三个式子吧
点赞 回复 分享
发布于 2021-02-16 21:24

相关推荐

霁华Tel:秋招结束了,好累。我自编了一篇对话,语言别人看不懂,我觉得有某种力量在控制我的身体,我明明觉得有些东西就在眼前,但身边的人却说啥也没有,有神秘人通过电视,手机等在暗暗的给我发信号,我有时候会突然觉得身体的某一部分不属于我了。面对不同的人或场合,我表现出不一样的自己,以至于都不知道自己到底是什么样子的人。我觉得我已经做的很好,不需要其他人的建议和批评,我有些时候难以控制的兴奋,但是呼吸都让人开心。
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
昨天 10:52
点赞 评论 收藏
分享
4 收藏 评论
分享
牛客网
牛客企业服务