zoukankan      html  css  js  c++  java
  • 机试基本算法笔记--数学问题

    1.%运算符

    a%b:若a为正数,则该结果必为非负数;若a为负数,则表达式必为非正数。表达式结果与b的符号没有直接关系,及a%b==a%-b。

    (a*b)%c=(a%c+b%c)%c

    (a+b)%c=(a%c+b%c)%c

    2.最大公约数

    int gcd(int a,int b)//递归
    {
         return b==0?a:gcd(b,a%b);  
    }
    
    int gcd(int a,int b)
    {
        while(!b)
        {
            int t=a%b;
            a=b;
            b=t;
        }
        return a;
    }

    3.最小公倍数

    int lcm(int a,int b)
    {
        return a*b/gcd(a,b);
    }

    4.素数筛选

    若一个数不是素数,则必存在一个小于它的素数为其因数。那么假如已经获得了小于一个数的所有素数,只需确定该数不能被这些素数整除,这个数即为素数。换一个角度来讲,在获得一个素数时,即将它的所有倍数均标记成非素数,这样当我们遍历到一个数时,它没有被任何小于它的素数标记为非素数,那么就确定其为素数。

    int prime[10000];//保存筛选的素数
    int primeSize;//保存素数的个数
    bool mark[10001];//若mark[i]为true,则表示该数x已被标记成非素数
    void init()
    {
        for(int i=1;i<=10000;i++)
        {mark[i]=false;}
        primeSize=0;
        for(int i=2;i<=10000;i++)
        {
            if(mark[i]==true) continue;
            prime[primeSize++]=i;
            for(int j=i*i;j<=10000;j+=i)
            {mark[j]=true;}
        }  
    }

    5.分解素因数

    对于一个数x

    p1,p2,...,pn为素数。

    那么对于一个数n,求其素因数:

    首先筛选出小于n的所有素数,然后依次遍历小于n的素数,判断其是否为n的因数。确定某素数为n的因数,则通过试除确定其对应的幂指数。

    int ansPrime[30];//按顺序保存分解出的素因数
    int ansSize=0;//分解出素因数的个数;
    int ansNum[30];//保存分解出的素因数对应的幂指数
    for(int i=0;i<primeSize;i++)
    {
        if(n%prime[i]==0)
        {
            ansPrime[ansSize]=prime[i];
            ansNum[ansSize]=0;
            while(n%prime[i]==0)
            {
                ansNum[ansSIze]++;
                n/=prime[i];
            }
            ansSize++;
            if(n==1) break;
        }
    }
  • 相关阅读:
    用socket方式传输Image和Sound文件
    maven常用构建命令
    文件大小转换成可显示的Mb,Gb和kb方法
    关于<img>标签与文字垂直居中
    socket编程---一个简单例子
    Java实现RC4加解密
    build path功能详解
    struts2中改变struts.xml默认路径
    OpenSessionInViewFilter 的配置及作用
    web.xml元素介绍
  • 原文地址:https://www.cnblogs.com/LMIx/p/11396931.html
Copyright © 2011-2022 走看看