zoukankan      html  css  js  c++  java
  • 数论

    欧几里得 :

    定义:

    在数论中,对于正整数N,少于或等于N ([1,N]),且与N互质的正整数(包括1)的个数,记作φ(n)。

        φ函数的值:

        φ(x)=x(1-1/p(1))(1-1/p(2))(1-1/p(3))(1-1/p(4))…..(1-1/p(n)) 其中p(1),p(2)…p(n)为x

    的所有质因数;x是正整数; φ(1)=1(唯一和1互质的数,且小于等于1)。注意:每种质因数只有一个。

    代码:单个

    int oula(int n)
    {
        int rea=n;
        for(int i=2; i<=n; i++)
            if(n%i==0)//第一次找到的必为素因子
            {
                rea=rea-rea/i;
                do
                    n/=i;//把该素因子全部约掉
                while(n%i==0);
            }
        return rea;
    }  
    View Code

    代码:多个

    for(i=1; i<=maxn; i++)
        p[i]=i;
    for(i=2; i<=maxn; i+=2)
        p[i]/=2;
    for(i=3; i<=maxn; i+=2)
    if(p[i]==i)
    {
    for(j=i; j<=maxn; j+=i)
    p[j]=p[j]/i*(i-1);
    }
    View Code

     判断是否为素数

    欧拉筛法:

    bool flag[N];
    int que[N];
    int r;
    void init(){
        for(ri i=2;i<=n;i++)
        {
            if(!flag[i])
            que[++r]=i;
            for(ri j=1;j<=r;j++)
            {
                if(que[j]*i>n) break ;
                flag[que[j]*i]=1;
                if(i%que[j]==0)
                break;
            }
        }
    }
    View Code

     大整数取mod(防止爆炸longlong)

    #define LL long long int
    LL mul(LL a, LL b, LL p)  //a*b%p
    {  
         LL rn=0, i;  
         for(i=1; i<=b; i<<=1,a=(a<<1)%p)  
          if(b&i) rn=(rn+a)%p;  
         return rn;  
    } // 计算大整数的模乘法
    View Code

      a 为  p  的个数

      因子的个数:(a1+1)*(a2+1)*......(an+1);

      最大公约数:

    long long gcd(int a,int b)
    {
        while(a%b!=0)
        {
            int aa=a;
            a=b;
            b=aa%b;
        }
        return b;
    }
    View Code

      最大公倍数 = a*b / gcd

    进制转化

    写一个函数,使它能完成将一个十进制的数转换为其他进制的功能。
    给出两个整数,a,b
    表示要将十进制整数a转换为b进制。
    0<=a<=1000000,2<=b<10
    十进制数a转换为b进制的方法是a不断的整除b,将余数列出来,直到商为0。然后将之前列出的余数倒序输出,得到b进制的结果。
    比如13转化为2进制:
    13 / 2 = 6  余数为 1
    6 / 2 =3  余数为0
    3 / 2 =1 余数为1
    1 / 2= 0 余数为 1
    此时商为0,结束这一过程。将余数倒序输出:得到1101,即为13的2进制。

    #include <bits/stdc++.h>
    using namespace std;
    
    void jjz(int a,int b)
    {
        if(a/b==0)
        {
            printf("%d",a%b);
            return ;
        }else
        {
            
            jjz(a/b,b);
            printf("%d",a%b);
            return ;
        }
    }
    int a,b,c,d;
    
    int main(){
        scanf("%d%d",&a,&b);
        jjz(a,b);
        return 0;
    }
    注意函数和输出的顺序
  • 相关阅读:
    Qt中实现单例模式(SingleTon)
    毕设开发手记(二)
    Qt中由表中单元格的QModelIndex获取Global Pos的正确方法
    Qt的槽可以使用默认参数
    C#结构的了解
    dos命令集江南技术联盟
    C#中的abstract与virtual的用法
    [转]六种删除数据库重复行的方法
    PL/SQL的TO_CHAR()与TO_DATE()
    索引索引索引(转)
  • 原文地址:https://www.cnblogs.com/Lamboofhome/p/11849818.html
Copyright © 2011-2022 走看看