LeetCode 第 204 题:计数质数(数学)

地址:https://leetcode-cn.com/problems/count-primes/

方法一:一个一个根据定义判断是否是质数

Java 代码:

public class Solution {

    public int countPrimes(int n) {
        int count = 0;
        for (int i = 1; i < n; i++) {
            if (isPrime(i)) {
                // System.out.printf("质数 %d \t", i);
                count++;
            }
        }
        return count;
    }

    /**
     * 根据质数的定义判别一个数是否是质数
     *
     * @param num
     * @return
     */
    private boolean isPrime(int num) {
        if (num <= 1) {
            return false;
        }
        for (int i = 2; i * i <= num; i++) {
            if (num % i == 0) {
                return false;
            }
        }
        return true;
    }
}

方法二:

  • 就会一种,这个数是质数,那么它的倍数从列表里删除;
  • 这个筛选法相当于先打个表 然后就不用一个一个去判断是否是素数了。

Java 代码:

import java.util.Arrays;

public class Solution {

    public int countPrimes(int n) {
        boolean[] primes = new boolean[n];
        Arrays.fill(primes, true);
        for (int i = 2; i < n; i++) {
            // 每一轮第一个没有被划去的数肯定是质数
            if (primes[i]) {
                for (int j = i + i; j < n; j += i) {
                    primes[j] = false;
                }
            }
        }
        // 下面开始计数
        int count = 0;
        for (int i = 2; i < n; i++) {
            if (primes[i]) {
                count++;
            }
        }
//        System.out.println("打印质数");
//        for (int i = 2; i < n; i++) {
//            if (primes[i]) {
//                System.out.println("质数 " + i);
//            }
//        }
        return count;
    }
}

相关问题:

1、「力扣」第 1175 题:质数排列

2、素数筛法

地址:https://leetcode-cn.com/circle/article/vXtCiY/

3、
地址:http://www.cnblogs.com/lightwindy/p/8549471.html
地址:https://blog.csdn.net/NoMasp/article/details/50617645

发布了442 篇原创文章 · 获赞 330 · 访问量 123万+

猜你喜欢

转载自blog.csdn.net/lw_power/article/details/103756603
今日推荐