模板:快速幂

本文详细介绍了快速幂算法及其在取模运算中的应用,并深入探讨了矩阵快速幂的概念与实现方法,包括矩阵乘法、矩阵相加及快速幂等关键操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

快速幂:

ll quick_pow(ll x, ll n){   //快速幂    
    ll ans=1;    
    while(n){    
        if(n&1){    
            ans=ans*x;    
        }    
        x=x*x;    
        n>>=1;    
    }    
    return (ans+mod)%mod;    
}    
ll quick(ll a,ll b,ll k){  //快速幂取模  
    if(b==0)return 1ll;
    if(b==1)      
        return a%k;      
    ll z=((a%k)*(a%k))%k;      
    if(b&1){      
        z=(a*quick(z,b/2,k))%k;      
        return z;      
    }      
    else      
        return quick(z,b/2,k);      
}  

矩阵快速幂:

typedef long long int ll;
const ll mod = 9973;
const int maxn=15;  //自己看情况定义
//定义矩阵乘法
struct matrix{
    ll arr[maxn][maxn];
    matrix operator*(matrix b){
        matrix ans;
        ll tmp;
        for(int i=0; i<maxn; i++)
        for(int j=0; j<maxn; j++){
            ans.arr[i][j] = 0;
            for(int k=0; k<maxn; k++){
                tmp = (arr[i][k]*b.arr[k][j])%mod;
                ans.arr[i][j] = (ans.arr[i][j] + tmp)%mod;
                //cout<<"oh"<<endl;
            }
        }
        return ans;
    }
};
//矩阵快速幂
matrix quick_pow(matrix a,ll N){
    matrix ans;
    memset(ans.arr,0,sizeof(ans.arr));
    for(int i=0; i<maxn; i++)
        ans.arr[i][i] = 1;
    while(N){
        if(N&1)
            ans = ans*a;
        a = a*a;
        N /= 2;;
    }
    return ans;
}

自定义矩阵大小,无需多余计算。

struct matrix{  
    int mat[31][31];  
};  
int n,mod;   
matrix mul(matrix A,matrix B){  
    int i,j,k;  
    matrix C;  
    ll tmp
    for(i=0;i<n;i++){  
        for(j=0;j<n;j++){  
            C.mat[i][j]=0;  
            for(k=0;k<n;k++){  
                tmp=A.mat[i][k]*B.mat[k][j]%mod
                C.mat[i][j]=(tmp+C.mat[i][j])%mod;  
            }  
        }  
    }  
    return C;  
}  
matrix add(matrix A,matrix B)//矩阵相加  
{  
    int i,j;  
    for(i=0;i<n;i++){  
        for(j=0;j<n;j++){  
            A.mat[i][j]+=B.mat[i][j];  
            A.mat[i][j]=A.mat[i][j]%mod;  
        }  
    }  
    return A;  
}  
matrix quick_pow(matrix A,int k){  //A矩阵的k次方  
    if(k==1)return A;  
    matrix B=quick_pow(A,k/2);  
    B=mul(B,B);  
    if(k%2)B=mul(B,A);  
    return B;  
}

这里有一个矩阵套矩阵,当时写的太费劲,也扔过来吧。但是一定注意:

开了maxn的数组,所以n之后的也要初始化。

typedef int ll;  
const int maxn=33;  
int n,mod;  
//定义矩阵乘法  
struct matrix{  
    ll arr[maxn][maxn];  
    matrix operator*(matrix b){  
        matrix ans;  
        ll tmp;  
        for(int i=0; i<maxn; i++)  
        for(int j=0; j<maxn; j++){  
            ans.arr[i][j] = 0;  
            for(int k=0; k<maxn; k++){  
                tmp = (arr[i][k]*b.arr[k][j])%mod;  
                ans.arr[i][j] = (ans.arr[i][j] + tmp)%mod;  
            }  
        }  
        return ans;  
    }  
    matrix operator+(matrix b){  
        matrix ans;  
        for(int i=0; i<maxn; i++)  
        for(int j=0; j<maxn; j++){  
            ans.arr[i][j]=(arr[i][j]+b.arr[i][j])%mod;  
        }  
        return ans;  
    }  
};  
struct Matrix{  
    matrix mat[2][2];  
    Matrix operator*(Matrix b){  
        Matrix ans;  
        for(int i=0;i<2;i++)  
        for(int j=0;j<2;j++)  
        for(int k=0;k<maxn;k++)  
        for(int l=0;l<maxn;l++)  
            ans.mat[i][j].arr[k][l]=0;  
        for(int i=0;i<2;i++)  
        for(int j=0;j<2;j++)  
        for(int k=0;k<2;k++){  
            ans.mat[i][j]=ans.mat[i][j]+(mat[i][k]*b.mat[k][j]);  
        }  
        return ans;  
    }  
};  
  
//矩阵快速幂  
Matrix quick_pow(Matrix a,ll N){  
    Matrix ans;  
    for(int i=0;i<2;i++)  
    for(int j=0;j<2;j++)  
        memset(ans.mat[i][j].arr,0,sizeof(ans.mat[i][j].arr));   
    for(int i=0; i<n; i++)  
        ans.mat[0][0].arr[i][i]=ans.mat[1][1].arr[i][i]=1;  
    while(N){  
        if(N&1)  
            ans = ans*a;  
        a = a*a;  
        N >>= 1;  
    }  
    return ans;  
} 


内容概要:本文档详细介绍了基于MATLAB实现多目标差分进化(MODE)算法进行无人机三维路径规划的项目实例。项目旨在提升无人机在复杂三维环境中路径规划的精度、实时性、多目标协调处理能力、障碍物避让能力和路径平滑性。通过引入多目标差分进化算法,项目解决了传统路径规划算法在动态环境和多目标优化中的不足,实现了路径长度、飞行安全距离、能耗等多个目标的协调优化。文档涵盖了环境建模、路径编码、多目标优化策略、障碍物检测与避让、路径平滑处理等关键技术模块,并提供了部分MATLAB代码示例。 适合人群:具备一定编程基础,对无人机路径规划和多目标优化算法感兴趣的科研人员、工程师和研究生。 使用场景及目标:①适用于无人机在军事侦察、环境监测、灾害救援、物流运输、城市管理等领域的三维路径规划;②通过多目标差分进化算法,优化路径长度、飞行安全距离、能耗等多目标,提升无人机任务执行效率和安全性;③解决动态环境变化、实时路径调整和复杂障碍物避让等问题。 其他说明:项目采用模块化设计,便于集成不同的优化目标和动态环境因素,支持后续算法升级与功能扩展。通过系统实现和仿真实验验证,项目不仅提升了理论研究的实用价值,还为无人机智能自主飞行提供了技术基础。文档提供了详细的代码示例,有助于读者深入理解和实践该项目。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值