《关于我教普奇神父数质数这档事》=>Java算出一定范围内的质数
没错,也许这将是一篇很有意思的博客
实际上我突然想到所谓"数质数"也是因为小学时数学老师
大概是在小学五年级吧,(我真的不清楚是啥时候了,总之就是在我们学"分解质因数"的这段时间)
我的数学老师: "我曾经有一个学生,他是学信息学的,他的数学很好,有一次我见到他的时候,他问我 '老师,你知道10000以内最大的质数是多少吗?' 当时我也不知道,毕竟很少有人会去专门了解这些,因此他告诉我他用'编程'解决了这个问题,我希望我们班的同学以后也能够有人像他一样,不要拘泥于单纯的成绩(虽然成绩十分重要),但是将来更需要注重的还有你的 '自学能力' "
那么老师,我来"完成"你的"期望"了
首先来声明一下我所使用到的工具和技术
- 编译器: IntelliJ IDEA 2020.1
- 编程语言: Java
- 编程依赖: Java自带类库以及环境
- 当然你需要有一定的Java编程基础
- 本文为原创,编程中的代码没有参考任何网络资料(指查询网络中已有的"Java找质数类的文章")
好的,我们开始讲讲思路
首先,(如果你不清楚),可以先了解一下质数的概念
质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。
- 在我们的代码中,我将使用一种神奇的方法去判断质数: 我们知道质数就是因数只有1和他本身的自然数 (大于1,并且下文中我所说的数字的范围都是大于1的自然数) ,那么我们实际上就可以判断=>每一个数字都是有质数之间相乘产生的,因此我们从2开始一直循环到10000,其中不能被质数整除的数字即为质数(每获取到一个质数,那么我们就把获取到的质数存储起来),那么大概意思就相当于是下图:
看完图之后,我就当作你已经理解我的思路了哈
整点主要代码:
static List<Integer> nums = new ArrayList<>();
static void isPrime(Integer n) {
if (n % 2 == 0) {
return;
}
for (Integer num : nums) {
if (n % num == 0) {
return;//说明是合数
}
}
nums.add(n);
}
然后我们再加一点点细节,就得到了完整的代码了:
package cn.abalone.test;
import java.util.ArrayList;
import java.util.List;
/**
* Create by Abalone
* CreateTime: 2020/9/5 12:17
*/
public class PrimeNumber {
static long startTime = System.currentTimeMillis();//获取开始时间
static List<Integer> nums = new ArrayList<>();
static void isPrime(Integer n) {
if (n % 2 == 0) {
return;
}
for (Integer num : nums) {
if (n % num == 0) {
return;//说明是合数
}
}
nums.add(n);
}
public static void main(String[] args) {
nums.add(2);
for (int i = 2; i <= 10000; i++) {
isPrime(i);
}
for (Integer num : nums) {
System.out.println(num);
}
long endTime = System.currentTimeMillis();//获取结束时间
System.out.println("程序运行时间:" + (endTime - startTime) + "ms");//输出程序运行时间
}
}
那么~这次的内容比较简单,相信大部分(学过的)人都能看懂,也许对你的帮助并不会很大,毕竟这只不过是我的一次突发奇想罢了¬_¬
那就白白咯~