How Many Calls? UVA - 10518

本文提供了一种使用矩阵快速幂的方法来解决UVA-10518问题,该问题要求计算特定递归函数的调用次数,并以特定进制输出结果。文章详细展示了C++实现过程。

How Many Calls? UVA - 10518
题意:求f(n)的递归调用次数,用输出base进制的最后一个数。
思路:f(0)=1,f(1)=1,f(n)=f(n-1)+f(n-2)+1;

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
typedef long long ll;
ll mod;
struct  matrix{
    ll x[3][3];
};
matrix multi(matrix a,matrix b){
    matrix temp;
    memset(temp.x,0,sizeof(temp.x));
    for(int i=0;i<3;i++)
        for(int j=0;j<3;j++)
            for(int k=0;k<3;k++)
            {
                temp.x[i][j]+=a.x[i][k]*b.x[k][j];
                temp.x[i][j]%=mod;
                //if(temp.x[i][j]<0) temp.x[i][j]=(temp.x[i][j]+mod)%mod;
            }
    return temp;
}
matrix quick_multi(matrix a,ll n)//矩阵快速幂
{
    matrix temp=a;
    n--;
    while(n){
        if(n&1)
            temp=multi(temp,a);
        a=multi(a,a);
        n>>=1;
    }
    return temp;
}
/*void p(matrix a)
{
    for(int i=0;i<5;i++)
    {
        for(int j=0;j<5;j++)
            printf("%lld ",a.x[i][j]);
        printf("\n");
    }
}*/
int main()
{
    ll n,kcase=0;
    while(scanf("%lld%lld",&n,&mod)!=EOF&&(n||mod))
    {
        printf("Case %lld: %lld %lld ",++kcase,n,mod);
        matrix A,B;
        if(n<=1) n==1?printf("1\n"):printf("1\n");
        else
        {
            memset(A.x,0,sizeof(A.x));
            memset(B.x,0,sizeof(B.x));
            A.x[0][0]=A.x[0][1]=A.x[0][2]=1;
            A.x[1][0]=A.x[2][2]=1;
            B.x[0][0]=B.x[1][0]=B.x[2][0]=1;
            A=quick_multi(A,n-1);
            B=multi(A,B);
            printf("%lld\n",B.x[0][0]%mod);
        }
    }
    return 0;
}
vue.runtime.esm.js:4482 [Vue warn]: Error in v-on handler: "TypeError: Cannot read properties of undefined (reading 'length')" found in ---> <ElButton> at packages/button/src/button.vue <ElFormItem> at packages/form/src/form-item.vue <ElForm> at packages/form/src/form.vue <ElRow> <Index> at src/views/SystemManagement/OperatorManagement/index.vue <Anonymous> <ElCard> at packages/card/src/main.vue <ElMain> at packages/main/src/main.vue <ElContainer> at packages/container/src/main.vue... (1 recursive calls) <ContainerView> at src/views/Main/index.vue <App> at src/App.vue <Root> warn @ vue.runtime.esm.js:4482 logError @ vue.runtime.esm.js:2985 globalHandleError @ vue.runtime.esm.js:2981 handleError @ vue.runtime.esm.js:2949 invokeWithErrorHandling @ vue.runtime.esm.js:2965 invoker @ vue.runtime.esm.js:1846 invokeWithErrorHandling @ vue.runtime.esm.js:2957 Vue.$emit @ vue.runtime.esm.js:3621 handleClick @ element-ui.common.js:1118 invokeWithErrorHandling @ vue.runtime.esm.js:2957 invoker @ vue.runtime.esm.js:1846 original_1._wrapper @ vue.runtime.esm.js:7078 vue.runtime.esm.js:2989 TypeError: Cannot read properties of undefined (reading 'length') at VueComponent.showUserDialog (index.js??clonedRuleSet-40.use[0]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/views/SystemManagement/OperatorManagement/index.vue?vue&type=script&lang=js:270:50) at click (index.js??clonedRuleSet-40.use[0]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/views/SystemManagement/OperatorManagement/index.vue?vue&type=template&id=f20bff86&scoped=true:81:20) at invokeWithErrorHandling (vue.runtime.esm.js:2957:26) at VueComponent.invoker (vue.runtime.esm.js:1846:14) at invokeWithErrorHandling (vue.runtime.esm.js:2957:26) at Vue.$emit (vue.runtime.esm.js:3621:9) at VueComponent.handleClick (element-ui.common.js:1118:750) at invokeWithErrorHandling (vue.runtime.esm.js:2957:26) at HTMLButtonElement.invoker (vue.runtime.esm.js:1846:14) at original_1._wrapper (vue.runtime.esm.js:7078:27)
最新发布
11-28
在 Vue 项目使用 Element UI 时,新增弹窗角色列表新增第二条数据不更新且出现 `TypeError: Cannot read properties of undefined (reading 'length')` 错误,可能由以下几种原因导致,对应的解决办法如下: #### 数据未正确更新 当使用 `push` 等方法更新数组时,可能由于数据绑定问题,视图未正确更新。可以使用 `Vue.set` 或 `this.$set` 来确保数据更新能被 Vue 检测到。 ```vue <template> <div> <el-button @click="addRole">新增角色</el-button> <el-table :data="userForm.roleList" border style="width: 100%" height="100%"> <el-table-column type="index" label="序号" width="60" align="center"/> <el-table-column prop="roleName" label="角色名称" align="center"/> <el-table-column prop="roleDeptName" label="角色部门" align="center"/> <el-table-column label="操作" align="center"> <template slot-scope="scope"> <el-button size="small" @click="deleteRow(scope.row)" type="text">删除</el-button> </template> </el-table-column> </el-table> </div> </template> <script> export default { data() { return { userForm: { roleList: [] } }; }, methods: { addRole() { const newRole = { roleName: '新角色', roleDeptName: '新部门' }; this.$set(this.userForm, 'roleList', [...this.userForm.roleList, newRole]); }, deleteRow(row) { const index = this.userForm.roleList.indexOf(row); if (index !== -1) { this.$set(this.userForm, 'roleList', this.userForm.roleList.filter((_, i) => i!== index)); } } } }; </script> ``` #### 数据为 `undefined` `TypeError: Cannot read properties of undefined (reading 'length')` 错误通常意味着尝试访问一个 `undefined` 对象的 `length` 属性。需要检查数据是否正确初始化,确保 `userForm.roleList` 不是 `undefined`。 ```javascript // 在组件创建时初始化数据 created() { if (!this.userForm.roleList) { this.userForm.roleList = []; } } ``` #### 事件处理问题 检查新增数据的事件处理逻辑是否正确,确保每次新增时都正确更新了 `userForm.roleList`。 ```javascript addRole() { const newRole = { roleName: '新角色', roleDeptName: '新部门' }; this.userForm.roleList = [...this.userForm.roleList, newRole]; } ``` #### 强制更新视图 在某些情况下,可以使用 `this.$forceUpdate()` 强制更新视图。 ```javascript addRole() { const newRole = { roleName: '新角色', roleDeptName: '新部门' }; this.userForm.roleList.push(newRole); this.$forceUpdate(); } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值