Java质数求解
质数概念
质数,又称素数,指在一个大于1的自然数中,除了1和此整数自身外,无法被其他自然数整除的数(也可定义为只有1和本身两个因数的数)。最小的素数是2,也是素数中唯一的偶数;其他素数都是奇数。质数有无限多个,所以不存在最大的质数。
目前总结大概有3中计算方式求解,具体如下
1. 粗鲁暴力定义求解法
public class Prime {
    // find the prime between 1 to 1000;
    public static void main(String[] args) {
        printPrime(1000);
    }
    public static void printPrime(int n) {
        for (int i = 2; i < n; i++) {
            int count = 0;
            for (int j = 2; j <= i; j++) {
                if (i % j == 0) {
                    count++;
                }
                if (j == i && count == 1) {
                    System.out.print(i + " ");
                }
                if (count > 1) {
                    break;
                }
            }
        }
    }
}
2. 平方根算法(降低循环次数)
public class Prime {
    // find the prime between 1 to 1000;
    public static void main(String[] args) {
        for (int i = 2; i < 1000; i++) {
            if (isPrime(i)) {
                System.out.print(i + " ");
            }
        }
    }
   /**
     * 求指定数是否为质数
     * @param num
     * @return
     */
    public static boolean isPrime(int num) {
        for (int j = 2; j <= Math.sqrt(num); j++) {
            if (num % j == 0) {
                return false;
            }
        }
        return true;
    }
}
3. 规律法
最小的素数是2,也是素数中唯一的偶数;其他素数都是奇数。质数有无限多个,所以不存在最大的质数。
public class Prime {
    // find the prime between 1 to 1000;
    public static void main(String[] args) {
        List<Integer> primes = getPrimes(1000);
        // 输出结果
        for (int i = 0; i < primes.size(); i++) {
            Integer prime = primes.get(i);
            System.out.printf("%8d", prime);
            if (i % 10 == 9) {
                System.out.println();
            }
        }
    }
   /**
     * 求 n 以内的所有素数
     * @param n  范围
     * @return n 以内的所有素数
     */
    private static List<Integer> getPrimes(int n) {
        List<Integer> result = new ArrayList<Integer>();
        result.add(2);
        for (int i = 3; i <= n; i += 2) {
            if (!divisible(i, result)) {
                result.add(i);
            }
        }
        return result;
    }
    /**
     * 判断 n 是否能被整除
     * @param n       要判断的数字
     * @param primes  包含素数的列表
     * @return        如果n能被 primes中任何一个整除,则返回 true。
     */
    private static boolean divisible(int n, List<Integer> primes) {
        for (Integer prime : primes) {
            if (n % prime == 0) {
                return true;
            }
        }
        return false;
    }
}
  第一种和第二种都是很简单的方法:
  第三种方法说明了一个质数的特性:在所有质数中,只有2是偶数。如果一个数能够被它之前的质数整除,那么这个数不是质数。
Java质数求解的更多相关文章
- java质数判断
		import java.util.Scanner; /** * Created by Admin on 2017/3/25. */ public class test01 { public stati ... 
- Leetcode 20题 有效的括号(Valid Parentheses) Java语言求解
		题目描述: 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合. 左括号必须以正确的顺序闭合. 注意空 ... 
- JAVA中求解对象所占字节大小
		该类为cache4j缓存框架中的工具类方法,该方法实现了两个接口 接口1:计算对象在内存中所占字节数 接口2:复制对象,实现深度克隆效果,实现原理为先序列化对象,然后在反序列化对象:返回一个新的对象, ... 
- Leetcode 239题 滑动窗口最大值(Sliding Window Maximum) Java语言求解
		题目链接 https://leetcode-cn.com/problems/sliding-window-maximum/ 题目内容 给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧 ... 
- Leetcode 703题数据流中的第K大元素(Kth Largest Element in a Stream)Java语言求解
		题目链接 https://leetcode-cn.com/problems/kth-largest-element-in-a-stream/ 题目内容 设计一个找到数据流中第K大元素的类(class) ... 
- LeetCode 225题用队列实现栈(Implement Stack using Queues) Java语言求解
		链接 https://leetcode-cn.com/problems/implement-stack-using-queues/ 思路 首先演示push()操作:将元素依次进入队1,进入时用top元 ... 
- LeetCode 232题用栈实现队列(Implement Queue using Stacks) Java语言求解
		题目链接 https://leetcode-cn.com/problems/implement-queue-using-stacks/ 题目描述 使用栈实现队列的下列操作: push(x) -- 将一 ... 
- Leetcode 206题 反转链表(Reverse Linked List)Java语言求解
		题目描述: 反转一个单链表. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 迭代解 ... 
- Leetcode 142题 环形链表 II(Linked List Cycle II) Java语言求解
		题目描述: 给定一个链表,返回链表开始入环的第一个节点. 如果链表无环,则返回 null. 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始). 如果 p ... 
随机推荐
- 第33次Scrum会议(11/21)【欢迎来怼】
			一.小组信息 队名:欢迎来怼小组成员队长:田继平成员:李圆圆,葛美义,王伟东,姜珊,邵朔,阚博文 小组照片 二.开会信息 时间:2017/11/21 11:35~11:57,总计22min.地点:东北 ... 
- Bing词典vs有道词典比对测试报告——体验篇之成长性及用户控制权
			成长性: 会记住曾经查询过的单词或例句与有道词典实现基本一样,并无特别亮点. 用户有控制权: 必应词典和有道词典都能实现基本的查询前进和后退.以及无法查找结果,能顺利进行反馈. 我们在输入完单词按下回 ... 
- 我是IT小小鸟读后感
			<我是一只IT小小鸟>一只是我想读list中一个本,但是上次去当当买的时候,竟然缺货了...昨天监考,实在无聊,就上网看电子书了,一天就看完了,看得有点仓促,所以理解估计不深. 1.刘帅: ... 
- 实验二 四则运算 完成版   ver.1
			package size; import java.awt.EventQueue; import javax.swing.JFrame; import javax.swing.JMenuBar; im ... 
- Unity3D游戏开发——物品存储:List与Dictionary
			本篇简介 本文介绍如何将碰撞处理后的物体存储在管理器中,分别用到两种不同的数据结构--List和Dictionary.我们将继续在上一篇博客的编程基础上进行完善. List和Dictionary的区别 ... 
- 修改shell命令的history记录个数
			修改history记录的命令如下所示:# vi /etc/profile 找到histsize=1000,将其改为histsize=100(这条可根据实际情况而定). 不重启系统就可让其生效,如下所示 ... 
- XLSReadWriteII5使用示例
			之前一直是使用XLSReadWriteII4,今天更新到XLSReadWriteII5,测试了一下,发现一些操作变化比较大,现将XLSReadWriteII5的使用示例写一下,以下是代码和生成的exc ... 
- ORACLE:一列的多行数据拼成字符串
			查询表中的一个字段,返回了多行,就把这么多行的数据都拼成一个字符串. 例: id name 1 aa 2 bb 3 cc 要的结果是&quo ... 
- git使用教程推荐
			Git使用教程 一:Git是什么? Git是目前世界上最先进的分布式版本控制系统. 二:SVN与Git的最主要的区别? SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是 ... 
- OneZero第二周第一次站立会议(2016.3.28)
			会议时间:2016年3月28日 会议成员:冉华,张敏,王巍,夏一鸣. 会议目的:分配第二周任务. 会议内容:由于老师要求4月1日进行Alpha发布,我们决定最优先完成消息录入功能.工作具体分配如下 1 ... 
