美文网首页
算法:数学问题

算法:数学问题

作者: Zack_H | 来源:发表于2019-08-13 14:23 被阅读0次
  • 204 计数质数
    快速计算小于n的质数个数的厄拉多塞筛法:
    先将 2-N 的各数放入表中,然后在 2 的上面画一个圆圈,然后划去 2 的其他倍数;第一个既未画圈又没有被划去的数是 3,将它画圈,再划去 3 的其他倍数;现在既未画圈又没有被划去的第一个数是 5,将它画圈,并划去5的其他倍数……依次类推,一直到所有小于或等于N的各数都画了圈或划去为止。
    public int countPrimes(int n){
        int i = 2;
        int num[] = new int[n];
        while (i < n){
            if (num[i] == 0) {
                num[i] = 1;
                for (int j = i + i; j < n; j += i) {
                    num[j] = -1;
                }
            }
            i++;
        }
        int count = 0;
        for (int j = 2; j<n; j++){
            if (num[j] == 1){
                count++;
            }
        }
        return count;
    }
  • 326 3的幂
    进制转换:将n转换为三进制数,然后判断其是否符合“100...0”的格式
    public boolean isPowerOfThree(int n) {
        return Integer.toString(n, 3).matches("^10*$");
    }

整数限制:int范围内,最大的3的幂是3^{19},因此所有的3的幂都是这个数的除数。

  public class Solution {
      public boolean isPowerOfThree(int n) {
          return n > 0 && 1162261467 % n == 0;
      }
  }
  • 50 Pow(x, n)
    快速幂算法:
    x^n = \begin{cases} x^{n/2}*x^{n/2}& {even}\\ x^{n/2}*x^{n/2}*x& {odd}\end{cases}
private double fastPow(double x, long n) {
        if (n == 0) {
            return 1.0;
        }
        double half = fastPow(x, n / 2);
        if (n % 2 == 0) {
            return half * half;
        } else {
            return half * half * x;
        }
    }
    public double myPow(double x, int n) {
        long N = n;
        if (N < 0) {
            x = 1 / x;
            N = -N;
        }

        return fastPow(x, N);
    }
  • 69 x 的平方根
    牛顿迭代法:使用函数的切线来近似计算函数零值
    本题中求y=x^2,可令f(x) = x^2-y,从x_0点开始迭代,
    x_0的切线函数为g(x) = f(x_0)+(x-x_0)f’(x_0)
    g(x)=0,得x = \frac12(x_0+\frac{y}{x_0}),令x = x_0
    迭代,直到x_0变化很小。
    def mySqrt(self, x):
        if x < 0:
            raise Exception('不能输入负数')
        if x == 0:
            return 0
        # 起始的时候在 1 ,这可以比较随意设置
        cur = 1
        while True:
            pre = cur
            cur = (cur + x / cur) / 2
            if abs(cur - pre) < 1e-6:
                return int(cur)
  • 166 分数到小数
    长除法:每次比对当前余数是否出现过,若出现,则得到循环节;否则,添加商,重置被除数。
        ...
        while (!rems.contains(num)){
            rems.add(num);
            num *= 10;
            quo = num / sor;
            num = num % sor;
            res += quo;
            if (num == 0) {
                if (numerator>0^denominator>0)
                    return "-" + res;
                else
                    return res;
            }
        }
        ...

相关文章

  • 算法:数学问题

    204 计数质数快速计算小于n的质数个数的厄拉多塞筛法:先将 2-N 的各数放入表中,然后在 2 的上面画一个圆圈...

  • [算法] 数学问题

    中常用函数pow(base, exponent)sqrt(x)fmax、fmin、fabsceil、...

  • 局部搜索算法简介

    局部搜索算法 目录: 1、数学定义 2、过程描述 3、算法简介 4、总结 1、数学定义 局部搜索是解决最优化问题的...

  • 优化算法中梯度下降算法的编程实现

    优化算法中梯度下降算法的编程实现 简介 梯度下降算法是运筹学的基础数学方法,用来求解运筹学所构造的数学问题。 本文...

  • 机器学习4:局部加权回归

    参数学习算法,非参数学习算法 参数学习算法,用固定的明确的参数进行数据的拟合。比如线性回归。非参数学习算法,使用的...

  • 【数学建模算法】(番外1)解决整数规划问题的Matlab函数in

    我们在数学建模算法(2)中了解了一种用于解决指派问题的算法——匈牙利算法,当时我在网上苦苦找寻算法实现代码,但是今...

  • 算法

    说起算法,相信大家普遍都听过数学算法,例如:口算,心算等,这些都属于数学算法。不过,今天给大家介绍的算法不是数学算...

  • stl 算法自带总汇

    算法,问题之解法也。以有限的解决逻辑或数学上的问题,这一专门科目我们称为算法。大学信息相关教育里面,与编程最有直接...

  • 02-21:LR算法

    LR算法 回头看LR算法真是异常简单啊 但是算法背后的数学原理想讲清楚也不容易 LR算法可以解决分类和回归问题 整...

  • 算法与数据结构-算法绪论

    什么是算法呢?算法是描述解决问题的方法。算法(Algorithm)这个单词最早出现在波斯数学家阿勒·花刺子密在公元...

网友评论

      本文标题:算法:数学问题

      本文链接:https://www.haomeiwen.com/subject/gfepjctx.html