地址: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