鱼C论坛

 找回密码
 立即注册
查看: 3067|回复: 4

题目188:数字的超幂

[复制链接]
发表于 2016-10-5 15:59:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
The hyperexponentiation of a number

he hyperexponentiation or tetration of a number a by a positive integer b, denoted by a↑↑b or ba, is recursively defined by:

a↑↑1 = a,
a↑↑(k+1) = a(a↑↑k).

Thus we have e.g. 3↑↑2 = 33 = 27, hence 3↑↑3 = 327 = 7625597484987 and 3↑↑4 is roughly 103.6383346400240996*10^12.

Find the last 8 digits of 1777↑↑1855.


题目:

hyperexponentiation 或者 tetration 即中文意译的超幂,数字 a 的超幂 b 次,可以写成 a↑↑b 或 ba 的形式,超幂以如下递归的形式定义:


a↑↑1 = a,
a↑↑(k+1) = a(a↑↑k).


因此,我们可以计算出,比如 3↑↑2 = 33 = 27, 然后是,3↑↑3 = 327 = 7625597484987 ,接着的 3↑↑4 大概等于103.6383346400240996*10^12

请给出 1777↑↑1855 的最后 8 位。

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-9-22 11:39:47 | 显示全部楼层
这题炒鸡简单
  1. import sys
  2. sys.setrecursionlimit(10000)
  3. def uparrow(a,b,m):
  4.     if b==1: return a%m
  5.     return pow(a,uparrow(a,b-1,m),m)
  6. print (uparrow(1777,1855,10**8))
复制代码

95962097
[Finished in 0.1s]
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-27 15:08:38 | 显示全部楼层
本帖最后由 永恒的蓝色梦想 于 2021-2-11 15:21 编辑

这题确实不难,快速幂搞定

C++ 1ms
  1. #include<iostream>



  2. int main() {
  3.     using namespace std;
  4.     ios::sync_with_stdio(false);

  5.     constexpr unsigned int MOD = 100000000;
  6.     unsigned long long res = 1777, base, temp;


  7.     for (unsigned short n = 1854; n; n--) {
  8.         temp = res;
  9.         res = 1;
  10.         base = 1777;

  11.         while (temp) {
  12.             if (temp & 1) {
  13.                 res = res * base % MOD;
  14.             }

  15.             base = base * base % MOD;
  16.             temp >>= 1;
  17.         }
  18.     }


  19.     cout << res << endl;
  20.     return 0;
  21. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-17 21:42:30 | 显示全部楼层
补充上面算法的理论证明:
由于gcd(1777,10^8)=1,所以根据数论中的Eulor定理知一定存在一个M使得1777^M=1 MOD 10^8。根据计算最小的M=1250000,又10^8=40*1250000,从而
1777^(10^8*p+q)=1777^q MOD 10^8,即1777^x=1777^(x MOD 10^8) MOD 10^8
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-23 10:44:51 | 显示全部楼层
本帖最后由 永恒的蓝色梦想 于 2021-2-11 15:18 编辑

Python
  1. res = 1777

  2. for _ in range(1854):
  3.     res = pow(1777, res, 100000000)

  4. print(res)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-11 18:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表