算法:数学问题

2019-08-13  本文已影响0人  Zack_H
    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;
    }
    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;
      }
  }
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);
    }
    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)
        ...
        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;
            }
        }
        ...
上一篇 下一篇

猜你喜欢

热点阅读