• 数论一丢丢模板


    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int maxn=1e5+7;
    const ll mod=1e9+7;
    bool a[maxn];///存放对于i是否是素数的判断
    ///试除法
    bool priem(ll n)
    {
        if(n==1)
            return false;
        for(ll i=2;i*i<=n;i++)
        {
            if(n%i==0)
                return false;
        }
        return true;
    }
    ///唉式筛
    void ai()
    {
        a[1]=false;
       for(int i=2;i<maxn;i++)
            a[i]=true;
       for(int i=2;i<maxn;i++)
       {
           if(a[i])
           {
               for(int j=i*2;j<maxn;j+=i)///优化的话就把出书画改成j=i*i
                a[j]=false;
           }
       }
    }
    ///线性筛(欧拉筛)
    void oula(ll N)
    {
        bool number[N+1];
        ll prime[N+1];
        ll i,j,count=0;
        memset(number,true,sizeof(number));
        for(i=2;i<=N;i++)
        {
            if(number[i])
                prime[count++]=i;
            for(j=0;j<count&&prime[j]*i<=N;j++)
            {
                number[prime[j]*i]=false;
                if(i%prime[j]==0)//精华就在于此:它保证每个合数只会被它的最小质因数筛去,因此每个数只会被标记一次,所以时间复杂度是O(n)
                    break;
            }
        }
        for(i=2;i<N+1;i++)
            if(number[i]==true)
                printf("%d ",i);
    }
    ///欧拉函数
    ll phi(ll n)
    {
        ll i,rea=n;
        for(i=2;i*i<=n;i++)
        {
            if(n%i==0)
            {
                rea=rea-rea/i;
                while(n%i==0)
                    n/=i;
             }
        }
        if(n>1)
            rea=rea-rea/n;
        return rea;
    }
    ///快速幂
    ll quickpow(ll base,ll mi)
    {
        ll ans=1;
        while(mi)
        {
            if(mi&1)
                ans=ans*base%mod;
            base=base*base%mod;
            mi>>=1;
        }
        return ans;
    }
    ///唯一分解
    void fen(ll n)
    {
        int a[1000][2];
        int w=0;
        ll t=n;
        for(int i=2;i<maxn&&n;i++)
        {
            if(priem(i))
            {
              if(n%i==0)
              {
                  a[w][0]=i;
                  int m=0;
                  while(n%i==0)
                  {
                     m++;
                     n/=i;
                  }
                  a[w][1]=m;
                  w++;
              }
            }
        }
        cout<<t<<"=";
        for(int i=0;i<w;i++)
            cout<<a[i][0]<<"^"<<a[i][1]<<"*";
        cout<<endl;
    }
    int main()
    {
        ll y,b;
    
        return 0;
    }
  • 相关阅读:
    luogu P3801 红色的幻想乡
    [USACO07OPEN]吃饭Dining
    [SCOI2007]蜥蜴
    [SDOI2011]染色
    [USACO07DEC]Sightseeing Cows
    [HNOI2007]紧急疏散EVACUATE
    [ZJOI2009]假期的宿舍
    [SDOI2013]费用流
    [CQOI2009]跳舞
    使用chrony安装chrony
  • 原文地址:https://www.cnblogs.com/tp25959/p/10431598.html
Copyright © 2020-2023  润新知