zoukankan      html  css  js  c++  java
  • PAT《算法笔记》

    3.5 进制转换

    • P进制转换为10进制
    // y 为要求的 10进制数
    // x 为 P 进制数,循环中每次取一位
    // product 在循环中不断乘 P,得到 P 的幂次
    int y = 0, product = 1;
    while (x != 0){
        y = y + (x % 10) * product;
        x = x / 10;
        product = product * P;
    }
    • 10进制转换为Q进制
    // 数组 z 用来存放所求 Q进制数的每一位
    // num 为 Q进制数的位数
    int z[40], num = 0;
    do {
        z[num++] = y % Q; // 除基取余法
        y = y / Q;
    } while (y > 0);
    // z 数组从 z[num-1] 到 z[0] 即为所求

    第五章  数学问题

    5.2 最大公约数与最小公倍数

     1 int gcd(int a, int b)   //求最大公约数的辗转相除法递归写法——【最小公倍数可用穷举法】
     2 {
     3     if(b == 0) return a;
     4     else return gcd(a, a % b);
     5 }
     6 
     7 int main()
     8 {
     9     int m, n;
    10     while( scanf("%d%d", &m, &n ) != EOF){
    11         printf("%d
    ", gcd(m, n));
    12     }
    13     return 0;
    14 }

    5.3 分数的四则运算

    struct Fraction{    //分数 
        int up, down;    //分子、分母 
    }; 

    5.4 素数

    • 素数判断
    bool isPrime(int x)        //1既不是素数也不是合数
    {
        if(x < 2) return false;
        for(int i = 2; i*i <= x; i++) if(x % 2 == 0) return false;
        return true;
    }
    • 素数筛法【复杂度:O(nloglogn)】
    const int maxn = 101;    //表长
    int prime[maxn], num = 0;    //prime数组存放所有素数 num为素数个数 
    bool p[maxn] = {0};    //如果 i为素数 p[i]为false 否则为true 
    void find_Prime()
    {
        for(int i = 2; i < maxn; i++)    //从2开始 i<maxn结束 注意不能写成i<=maxn 
        {
            if(p[i] == false)
            {
                prime[num++] = i;
                for(int j = i+i; j < maxn; j++) p[j] = true;    
            }    
        }    
    } 

    5.5 质因子分解

    struct factor{
        int x, cnt;        //x为质因子 cnt为其个数 
    }f[10]; 
    
    if(n % prime[i] == 0)    //如果prime[i]是n的因子 
    {
        f[num].x = prime[i];    //记录该因子 
        f[num].cnt = 0;
        while(n % prime[i] == 0)    // 计算出质因子prime[i]的个数 
        {
            f[num].cnt++;
            n /= prime[i];
        }
        num++;    //不同质因子个数加 1 
    }
    
    if(n != 1)    //如果无法被根号n以内的质数除尽 
    {
        f[num].x = n;    //那么一定有一个大于根号n的质因子    
        f[num++].cnt = 1; 
    } 

    5.6 大整数运算

    struct bignum{
        int num[1000];
        int len;
        bignum()//构造函数 
        {
            memset(num, 0, sizeof(num));//初始化结构体 
            len = 0; 
        }
    };

    字符串输入转数字分别存入数组,模拟高精度加减运算。

    *5.7 扩展欧几里得算法

    *5.8 组合数

    //计算n!中有多少个质因子p
    int cal(int n, int p)
    {
        int ans = 0;
        while(n)
        {
            ans += n / p;    //累加n/p^k
            n /= p;    
        }    
        return ans;
    } 

    时间复杂度:O(logn)

     第六章  C++标准模板库(STL)

    【所有代码必须手动模拟一遍,无论是函数功能模块还是完整程序】

     

  • 相关阅读:
    [SQL Basics] Indexes
    [DS Basics] Data structures
    [Algorithm Basics] Search
    [Algorithm Basics] Sorting, LinkedList
    [Java Basics] multi-threading
    [Java Basics] Reflection
    [Java Basics] Collection
    SSH basics
    纯css实现三角形
    2015年百度实习生前端笔试题上海卷a
  • 原文地址:https://www.cnblogs.com/kamisamalz/p/13561494.html
Copyright © 2011-2022 走看看