zoukankan      html  css  js  c++  java
  • 模板

    矩阵快速幂(专门针对于斐波那契数列的模板)

     1 __int64 fast_mod(__int64 n)    // 求 (t^n)%MOD
     2 {
     3    __int64 t[2][2] = {1, 1, 1, 0};
     4     __int64 ans[2][2] = {1, 0, 0, 1};  // 初始化为单位矩阵
     5     __int64 tmp[2][2];    //自始至终都作为矩阵乘法中的中间变量
     6 
     7     while(n)
     8     {
     9         if(n & 1)  //实现 ans *= t; 其中要先把 ans赋值给 tmp,然后用 ans = tmp * t
    10         {
    11             for(int i = 0; i < 2; ++i)
    12                 for(int j = 0; j < 2; ++j)
    13                     tmp[i][j] = ans[i][j];
    14             ans[0][0] = ans[1][1] = ans[0][1] = ans[1][0] = 0;  // 注意这里要都赋值成 0
    15 
    16             for(int i = 0; i < 2; ++i)    //  矩阵乘法
    17             {
    18                 for(int j = 0; j < 2; ++j)
    19                 {
    20                     for(int k = 0; k < 2; ++k)
    21                         ans[i][j] = (ans[i][j] + tmp[i][k] * t[k][j]) % MOD;
    22                 }
    23             }
    24         }
    25 
    26         //  下边要实现  t *= t 的操作,同样要先将t赋值给中间变量  tmp ,t清零,之后 t = tmp* tmp
    27         for(int i = 0; i < 2; ++i)
    28             for(int j = 0; j < 2; ++j)
    29                 tmp[i][j] = t[i][j];
    30         t[0][0] = t[1][1] = 0;
    31         t[0][1] = t[1][0] = 0;
    32         for(int i = 0; i < 2; ++i)
    33         {
    34             for(int j = 0; j < 2; ++j)
    35             {
    36                 for(int k = 0; k < 2; ++k)
    37                     t[i][j] = (t[i][j] + tmp[i][k] * tmp[k][j]) % MOD;
    38             }
    39         }
    40         n >>= 1;
    41     }
    42     return ans[0][1];
    43 }

    欧拉函数(小于等于N的且与N互质的数的个数)

     1 int  p[ maxn   ];
     2     long long   phi[ maxn + 1];
     3     long long i,j;
     4     for(i = 1; i <= maxn; i++)    // 初始化
     5     { p[i] = 1; phi[i] = i; }
     6     p[1] = 0;    // 1不是素数
     7     for(i = 2; i<= maxn; i++)    // 筛素数
     8     {
     9         if(p[i])
    10         {
    11             for(j = i * i; j <= maxn; j += i)
    12             { p[j] = 0; }
    13         }
    14     }
    15     for(i = 2; i <= maxn; i++)    // 求欧拉函数
    16     {
    17         if(p[i])
    18         {
    19             for(j = i; j <= maxn; j += i)    // 处理素因子p[i]
    20             {
    21                 phi[j] = phi[j] / i * (i - 1);    // 先除后乘,防止中间过程超出范围
    22             }
    23         }
    24     }
  • 相关阅读:
    ZROI 19.08.04模拟赛
    具体数学 第一章 递归问题
    ZROI 19.08.02 杂题选讲
    win下在虚拟机安装CentOS 7 Linux系统
    ICP算法(迭代最近点)
    Python学习笔记(一)
    堆和堆排序
    笔试面试题记录-
    笔试面试记录-字符串转换成整型数等(aatoi,itoa)
    支持向量机原理(一) 线性支持向量机
  • 原文地址:https://www.cnblogs.com/Tree-dream/p/5781509.html
Copyright © 2011-2022 走看看