zoukankan      html  css  js  c++  java
  • 经典模板

    1.素数

    // 判断素数  
    bool isPrime(int num)  
    {  
        if (num == 2 || num == 3)  
        {  
            return true;  
        }  
        if (num % 6 != 1 && num % 6 != 5)  
        {  
            return false;  
        }  
        for (int i = 5; i*i <= num; i += 6)  
        {  
            if (num % i == 0 || num % (i+2) == 0)  
            {  
                return false;  
            }  
        }  
        return true;  
    }  
    判断素数
    /*
        |埃式筛法|
        |快速筛选素数|
    */
    
    int prime[maxn];  
    bool is_prime[maxn];
    
    int sieve(int n){
        int p = 0;
        for(int i = 0; i <= n; ++i)
            is_prime[i] = true;
        is_prime[0] = is_prime[1] = false;
        for (int i = 2; i <= n; ++i){   //  注意数组大小是n
            if(is_prime[i]){
                prime[p++] = i;
                for(int j = i + i; j <= n; j += i)  //  轻剪枝,j必定是i的倍数
                    is_prime[j] = false;
            }
        }
        return p;   //  返回素数个数
    }
    素数筛法
    int isPrime_sieve(int n){  
        int* isPrimes = (int*)malloc(sizeof(int)*(n+1));  
        int i,j;  
        int sqrtn = sqrt(n);  
      
        if(n<=1)  
            return 0;  
      
        for(i=2;i<=n;i++){       //初始化都为素数  
            isPrimes[i] = 1;  
        }  
      
        //从2开始,将素数的倍数标记为非素数  
        //从i的平方开始标记即可,不需要从i*j(且j<i)开始,因为i*j至少在遇到j时已经被标记过了  
        for(i=2;i<=sqrtn;i+=1){    
              
            if(isPrimes[i]==0)  //不是素数,说明i可以分解为两个因子相乘,那么在遇到这两个因子的较小者时,i的倍数已经被标记过  
                continue;  
      
            for(j=i*i;j<=n;j+=i){    //j是i的倍数  
                isPrimes[j] = 0;  
            }  
        }  
      
        return isPrimes[n];  
    }  
    素数筛法2

    2.快速幂

    /*快速幂取模*/
    typedef long long LL;
    LL pow(LL x, LL n, LL m)
    {
        LL ans=1;
        while(n)
        {
            if(n&1)
                ans=(ans*x)%m;
            x=(x*x)%m;
            n>>=1;
        }
        return ans;
    }
    快速幂取模

    3.全排列

    #include<stdio.h>  
    #include<string.h>  
    #include<string.h>  
    #include<algorithm>  
    #include<iostream>  
    #include<map>  
    using namespace std;  
    string a[100000];  
    char b[50];  
    int cmp(char a,char b)  
    {  
        return a<b;  
    }  
    int main()  
    {  
        int i,j,sum=1,len;  
        scanf("%s",b);  
        len=strlen(b);  
        sort(b,b+len,cmp);  
        do  
        {  
            printf("%s
    ",b);  
        }while(next_permutation(b,b+len));  
        return 0;  
    }     
    51nod 1384 全排列next法

    4.星期公式

    int solve(int yy,int mm,int dd)
    {
        int m[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
        if(mm==0||mm>12||dd==0||dd>31)
        {
            return -1;
        }
        if(!((yy%4==0)||yy%400==0))
            m[2]=28;
        else
            m[2]=29;
        if(dd>m[mouth])
        {
            return -1;
        }
        if(mm<3)
        {
            yy--;
            mm+=12;
        }
        int c=yy/100;
        int y=yy%100;
        return (((c/4-2*c+y+y/4+13*(mm+1)/5+dd-1)%7+7)%7);
    }
    蔡勒公式

    5.矩阵相关

    typedef long long ll;  
    const int N = 2;  
    struct Matrix  
    {  
        ll mat[N][N];  
    };  
    Matrix operator * (Matrix a,Matrix b)  
    {  
        Matrix c;  
        for (int i = 0;i < N;++i)  
        {  
            for (int j = 0;j < N;++j)  
            {  
                c.mat[i][j] = 0;  
                for (int k = 0;k < N;++k)  
                {  
                    c.mat[i][j] += a.mat[i][k]*b.mat[k][j];  
                }  
            }  
        }  
        return c;  
    }  
    n*n矩阵乘法
  • 相关阅读:
    QTP err.number
    QTP参数化
    QTP基础
    QTP脚本补录
    QTP添加对象入库
    系统自带计算器自动化
    QTP安装
    App 测试
    本地化和国际化测试
    剑桥雅思写作高分范文ESSAY30
  • 原文地址:https://www.cnblogs.com/Roni-i/p/7632788.html
Copyright © 2011-2022 走看看