质数概念

  质数,又称素数,指在一个大于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质数求解的更多相关文章

  1. java质数判断

    import java.util.Scanner; /** * Created by Admin on 2017/3/25. */ public class test01 { public stati ...

  2. Leetcode 20题 有效的括号(Valid Parentheses) Java语言求解

    题目描述: 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合. 左括号必须以正确的顺序闭合. 注意空 ...

  3. JAVA中求解对象所占字节大小

    该类为cache4j缓存框架中的工具类方法,该方法实现了两个接口 接口1:计算对象在内存中所占字节数 接口2:复制对象,实现深度克隆效果,实现原理为先序列化对象,然后在反序列化对象:返回一个新的对象, ...

  4. Leetcode 239题 滑动窗口最大值(Sliding Window Maximum) Java语言求解

    题目链接 https://leetcode-cn.com/problems/sliding-window-maximum/ 题目内容 给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧 ...

  5. Leetcode 703题数据流中的第K大元素(Kth Largest Element in a Stream)Java语言求解

    题目链接 https://leetcode-cn.com/problems/kth-largest-element-in-a-stream/ 题目内容 设计一个找到数据流中第K大元素的类(class) ...

  6. LeetCode 225题用队列实现栈(Implement Stack using Queues) Java语言求解

    链接 https://leetcode-cn.com/problems/implement-stack-using-queues/ 思路 首先演示push()操作:将元素依次进入队1,进入时用top元 ...

  7. LeetCode 232题用栈实现队列(Implement Queue using Stacks) Java语言求解

    题目链接 https://leetcode-cn.com/problems/implement-queue-using-stacks/ 题目描述 使用栈实现队列的下列操作: push(x) -- 将一 ...

  8. Leetcode 206题 反转链表(Reverse Linked List)Java语言求解

    题目描述: 反转一个单链表. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 迭代解 ...

  9. Leetcode 142题 环形链表 II(Linked List Cycle II) Java语言求解

    题目描述: 给定一个链表,返回链表开始入环的第一个节点. 如果链表无环,则返回 null. 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始). 如果 p ...

随机推荐

  1. Daily Scrum 11.19 部分测试报告

    下面是我们的部分测试报告: 功能测试部分: 1Exception in thread "Thread-11" java.lang.IllegalArgumentException: ...

  2. No.0_Team C#

    杜正远 略宅,喜昼伏夜出,却又喜游山玩水.平日多出现于宿舍食堂实验室,其他地方鲜有涉足.热爱编程与电脑游戏,渴望自己能写一款自己喜欢玩的电脑游戏,并以此为目标. 喜欢研究算法,但不喜欢硬件.正在入门软 ...

  3. 今日事——Sprint计划会议

    一.   Sprint需求: 解屏提醒部分 界面设计 登录功能 备忘功能 成就系统 二.工作认领: 因有成员请假回家,所以延后认领,目前主要任务是学习如何在andriod平台开发并搭建开发环境. 网上 ...

  4. ORACLE_SQL

    --建立学生表create table Student (       Sno char(9) primary key,       Sname char(20)unique,       Sex  ...

  5. mybatis 原理

    什么是Mybatis MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为 ...

  6. C#编程概述

    一个简单的c#程序 标识符 标识符是一种字符串,用来命名变量.方法.参数和许多后面将要阐述的其他程序结构. 关键字 所有C#关键字都由小写字母组成,但是.NET类型名使用Pascal大小写约定. Ma ...

  7. golang string转json的一些坑

    先带来点冷知识,不知道大家知不知道,反正我刚知道... 大佬们都知道怎么在string中给string类型赋值带双引号的字符串,没错就是用反斜杠,如下: msg := "{\"na ...

  8. apache 2.4目录权限

    apache 2.4 好象不再支持以下指令...Order allow,denyAllow from all 用上面的指令访问页面时显示错误:client denied by server confi ...

  9. 转 js事件探秘

    Javascript中的事件,可以和html交互. 事件流IE&Opera:事件冒泡其他浏览器: 事件捕获 事件冒泡:事件由最具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上传播至 ...

  10. [转帖] go的import 语法

    package 的导入语法写 Go 代码的时经常用到 import 这个命令用来导入包,参考如下: import( "fmt" ) 然后在代码里面可以通过如下的方式调用: fmt. ...