bjfuOJ 1025Ackermann函数(写暴力,找规律循环节)


Ackermann函数

时间限制(普通/Java):1000MS/3000MS          运行内存限制:65536KByte
总提交:122            测试通过:25

描述

计算Ackermann函数值?天方夜谭吧?

不错,Ackermann函数是增长速度极快的递归函数,要计算其函数值当然是相当困难的。

Ackermann函数定义如下:

本题中我们只需要计算当m=3时Ackermann函数的值

输入

输入包含多组测试数据,每组测试数据占一行,为一个64位整数n

输出

对每组输入的n,请输出Ackermann函数当m=3时的值,也就是A(3,n)。最后结果对9223372036854775807取余。

样例输入

5
10
100

样例输出

253
8189
1099511627773



先写暴力程序(注意数组要开大),之后找规律,递推

暴力程序就按照题目描述写成递归形式即可,  计算前10项就能看出规律了。

 #define LL __int64
 #define M 9223372036854775807ll
 LL f[N];
 void init(){
    f[0] = 5;
    for(int i=1;i<70;i++){
    f[i] = (f[i-1]*2+3) % M;
 }
    f[61] = M - 1;
    f[62] = 1;  
    f[63] = 5;
 }
 int main(){
    init();
    LL n;
    while(scanf("%I64d",&n)!=EOF){
        f[0] = f[63];
        printf("%I64d\n",f[n%63]);
    }
    return 0;
 }




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值