Code for fun (1)

矩阵乘法 (Size*Size)

class mat{
    const static int Size=10;
    unsigned long long a[Size][Size];
    friend::mat operator*(const mat&a, const mat&b)
    {
        mat c;
        for(int i=0;i<Size;i++)
            for(int j=0;j<Size;j++){
                unsigned long long *temp=&c.a[i][j]; *temp=0;
                for(int k=0;k<Size;k++) *temp+=a.a[i][k]*b.a[k][j];
            }
        return c;
    }
};

 

Fibonacci 矩阵还可以这样写

class fibmat{
    long long a,b,c;
    friend::fibmat operator*(const fibmat&a, const fibmat&b)
    {
        fibmat c;
        c.a=a.a*b.a+a.b*b.b;
        c.b=a.a*b.b+a.b*b.c;
        c.c=a.b*b.b+a.c*b.c;
        return c;
    }
};


 快速幂

template <class type>
type power(type a,type b) // 要求b>0 
{
    type t=a; b--;
    for(;b;b>>=1)(b&1)?t=t*a:0;a=a*a;
    return t;
}

 

template <class Type>
Type power(Type a,int b)
{
    Type t=Type::ZERO; 
    for(;b;b>>=1)(b&1)?t=t*a:0;a=a*a;
    return t;
}


对应的矩阵构造

class mat{
    public:
    const static int Size=10;
    static const mat ZERO;
    unsigned long long a[Size][Size];
    mat(int x=0){ 
        memset(a,0,sizeof(a));
        if(x==-1)
            for(int i=0;i<Size;i++)a[i][i]=1;
    }
    friend::mat operator*(const mat&a, const mat&b)
    {
        mat c;
        for(int i=0;i<Size;i++)
            for(int j=0;j<Size;j++){
                unsigned long long *temp=&c.a[i][j]; *temp=0;
                for(int k=0;k<Size;k++) *temp+=a.a[i][k]*b.a[k][j];
            }
        return c;
    }
};

const mat mat::ZERO=mat(-1);

 

数据类快速幂

template <class Type>
Type Power(Type a,int b)
{
    Type t = 1;
    for(;b;b>>=1)(b&1)?t=t*a:0;a=a*a;
    return t;
}


 

这样就组成一个头文件了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值