题目:统计N以内的素数
素数:只能被1和自身整除的数,0、1除外
解法1:暴力算法
直接从2开始遍历,判断是否能被2到自身之间的数整除
步骤:
1、循环除1和自身外的所有整数
2、判断是否能够整除
注意:
1、循环要从2开始n-1结束,因为1和n除外,要排除掉
2、素数也叫质数,Java中可以使用%运算符判断(i % j == 0)
3、考虑时间复杂度,暴力算法优化,见注释
package od; /** * 统计N以内的素数 * 暴力算法 * 素数:只能被1和自身整除的数,0、1除外 * 原文地址:https://www.codernav.com/2780.html */ public class Odtest06 { public static void main(String[] args) { int count = f(100); // 输出:25 System.out.println(count); } private static int f(int n) { int count = 0; // 从2开始n-1结束,因为1和n除外,要排除掉 for (int i = 2; i < n; i++) { // count += check(i) ? 1 : 0; count += check1(i) ? 1 : 0; } return count; } /** * 如果是素数,返回true,否则返回false */ private static boolean check(int i) { for (int j = 2; j < i; j++) { if (i % j == 0) { return false; } } return true; } /** * 优化暴力算法 * 实际上,for循环遍历时,j只需要<=根号i即可,降低时间复杂度 * 举例:12,可以拆解成2x6,3x4,4x3,6x2,只需要判断前两个成立即可,后面两个没必要重复判断 * j * j <= i 等价于 j <= 根号i */ private static boolean check1(int i) { for (int j = 2; j * j <= i; j++) { if (i % j == 0) { return false; } } return true; } }
© 版权声明
文章版权归作者所有,未经允许请勿转载。
相关文章
暂无评论...