java 中求质数 (素数) 的问题
这篇笔记讲讲关于 java 中质数的问题.
一, 什么是质数(素数)?
定义: 质数又称素数. 一个大于 1 的自然数, 除了 1 和它自身外, 不能被其他自然数整除的数叫做质数; 否则称为合数. 它可以有无限个数.
二, java 习题: 输出 1-100 之内的所有质数
这题有几种解题思路:
第一种思路:
1, 外层循环作为被除数, 内层循环作为除数.
2, 定义一个 Boolean, 标记外层循环数是否为质数. 默认为 true.
3, 内层循环结束, 如果开关还为 true. 即被除数为质数, 打印出来.
代码如下:
- class Demo2{
- public static void main(String args[]){
- //1 既不是质数也不是和数, 使用 i 从 2 开始.
- for(int i=2;i<=1000;i++){
- boolean flag = true;
- for(int j = 2;j <i;j++){
- if(i % j==0){
- flag = false;
- break;// 到了 1000 内的质数, 就跳出循环, 并输出结果.
- }
- }
- if(flag){
- System.out.print(" "+i);
- }
- }
- }
- }
运行效果:
第二种思路:
1, 这个程序用了两层循环, 外层循环列举从 2 到 100 之间的每一个整数(作为被除数), 然后在内层循环中用从 2 到它之之间的数去除它, 如果找到一个能够整除它的数, 内层循环将跳出. 如果一张没找到能够整除它的数, 则当内层循环将 2 到它直接按的所有数都尝试过一遍之后, 内循环也跳出.
2, 等到内层循环跳出之后, 程序接着判断 j 是否大于等于 i, 如果是上面的情况, 表明这个数是质数, 于是将这个数打印出来.
- class Demo3{
- public static void main(String args[]){
- int i,j;
- for(i = 2;i < 100;i++){
- for(j = 2;j < i;j++){
- if(i % j == 0)
- break;
- }
- if(j>=i){
- System.out.print(" "+i);
- }
- }
- }
- }
运行效果:
二, java 习题: 输出 0-100 的质数和
- class Demo3{
- public static void main(String args[]){
- int sum = 0;
- int j = 2;
- // 找出 1-100 的质数之和
- for (int i = 2; i <= 100; i++) { // i 值为 2, 质数为除去 1 和自身整除的数 j 初始值为 2 去除偶数
- for (j = 2; j <i; j++) { // 内层循环遍历查询 i 的整除数
- if (i % j == 0) { // 判断当前 i 是否可以整除 k 值
- break; // 整除则跳出循环
- }
- }
- // 如果当前内循环没有正常结束 j 与 i 对比不成立
- if (j>= i) {
- sum += i; // 累计质数和
- System.out.println(i); // 输出质数
- }
- }
- System.out.println(sum); // 输出质数之和
- }
- }
来源: https://www.2cto.com/kf/201904/803768.html