Java学习第一天:数据基础,打印质数的实现


第一天正式学习Java,写下这篇关于质数求解的文章,希望能更改进的更好。

首先说,以前在C上求解过质数的问题,当时没怎么在意。一直用的方法是从2开始递增到n-1,如果在这个过程中有一个数能被n整除,那么这个数就不是质数。这样做当然是没问题的最简单的一种方法。

之后看了一些文章的介绍,随着数学知识的增长,今天在学习Java语言上实现了这个想法,把这一过程记录如下:

先从最原始的递增法说起:

1、除了2之外,全部的质数是奇数,所以,循环数可以减少一般。

2、递增的界限不应是n-1,可以加以优化。对于整数N,存在最大的n,使得n的平方<=N,在自然数范围内,N必定可以分解为两个数的乘积,假设分解的结果是n1*n2=N,且n1<n2;那么必定有n1<n<n2。这样得出结论,在求质数的过程中,递增的最大的界限是N的二次方根。

3、实现代码:(java)

// 判断一个是是否是质数
Scanner input=new Scanner(System.in);
System.out.println("请输入数字:");
int number=input.nextInt();
boolean flag=true;

//if..else:当输入的数小于2时,显示错误;当输入的是2时,显示是质数,当输入的是大于2的数时,开始循环判断
if(number<2){
    System.out.println("输入非法,请输入大于2的整数。程序终止");
}else if(number==2){
    System.out.println("2 是质数");
}else{
   
    //如果能被2整除修改flag,否则从3开始for循环判断是否修改flag
    if(number%2==0){
        flag=false;
    }else{
            for(int i=3;i<=Math.sqrt(number);i+=2){
                if(number%i==0){
                    flag=false;
                    break;
                }
            }
        }
   
    //根据flag是否被修改,判断时候是质数
    if(flag){
        System.out.println(number+"是质数");
    }else{
        System.out.println(number+"不是质数");
    }
}

4、对于打印n内所有的质数的问题,用上面的方法一个一个的判断是非常浪费资源的。使用晒法打印效率会高很多。

5、晒法的基本思想是除去N内所有质数倍数的数,剩下的就是质数,比如打印10以内的质数:

从a=2开始,先除去2倍数的数,即4、6、8;

a++,3,没被除去必是质数,再除去3倍数的数,6,9;

a++,4,已经被除去,循环继续;

a++,5,没被除去必是质数,除去5的倍数10;

到这步,由于至少需要除去质数的2倍的数,即,循环的最大数是n/2。对于大于n/2再处理,如果它没有被前面的操作除去,那么它必定是质数。

代码实现(Java):

//筛选法,实现100以内所有素数的打印
        byte[] bl=new byte[100];
       
        //k用来存储每个待除去的数组下标
        int k;
        //将所有的值设为1
        for(int j=0;j<100;j++){
            bl[j]=1;
        }
       
        //晒法实现去除所有非质数
        for(int i=1;i<=50;i+=1){
            //如果这个数组值不为1,则继续
            if(bl[i]==0){
                continue;
            }
            for(int j=i;j<100/(i+1);j++){
                k=(i+1)*(j+1)-1;
                bl[k]=0;
            }
        }
        System.out.print(‘2‘+" ");
        for(int i=2;i<100;i+=2){
            if(bl[i]==1)
                System.out.print((i+1)+" ");
        }
        System.out.println();     //结果应该是    2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
     }

时间: 2024-10-12 04:14:59

Java学习第一天:数据基础,打印质数的实现的相关文章

201671010140. 2016-2017-2 《Java程序设计》java学习第一周

   java学习第一周        本周是新学期的开端,也是新的学习进程的开端,第一次接触java这门课程,首先书本的厚度就给我一种无形的压力,这注定了,这门课程不会是轻松的,同时一种全新的学习方式:反转课堂,全新的尝试,忐忑的同时,又对这段新的学习路途充满了期待.         第一章,其实就是对java这门课程学习的一个铺垫和前期热身,第二章则是帮助我们了解并试着运用有关工具及了解java开发环境,通过阅读书本,相关课件,相关工具使用文件,同时在上机操作的过程中逐渐吸收知识.     

Java 学习第一步-JDK安装和Java环境变量配置

Java学习第一步——JDK安装及Java环境变量配置 [原文] 2014-05-30 9:09  Java SE  阿超  9046 views Java作为当下很主流的编程语言,学习Java的朋友也越来越多了,作为一门面向对象的编程语言,Java也有着安全.高效等诸多有点.从TIOBE(TIOBE排行榜是根据互联网上有经验的程序员.课程和第三方厂商的数量,并使用搜索引擎(如Google.Bing.Yahoo!.百度)以及Wikipedia.Amazon.YouTube统计出排名数据,只是反映

Java学习-022-Properties 文件数据写入

Properties 配置文件写入主要通过 Properties.setProperty 和 Properties.store 两个方法,此文以一个简单的 properties 文件写入源码做示例. 小二上码...若有不足之处,敬请大神指正,不胜感激! Properties 文件写入源码如下所示: 1 /** 2 * @function write data to text file by Properties 3 * 4 * @author Aaron.ffp 5 * @version V1.

java学习第一个小项目--商品系统

是 对于java学习的前期,大约学了三周左右,我们在老师的带领下写了这个商品系统,功能比较简单,运用的都是java学习前期比较基础的知识 这是我对这个系统的名字与包和class文件的命名. 主要创建的是商品和生产者之间,Commodity和producer. 创建商品的基本属性(成员变量),以及一个无参钩爪方法 重点是Producer类中的编写. 按照序列号对商品进行升序排序 按照商品保质期的长短对商品进行排序 下面是主程序里面,加入自己创建的商品数据,对商品系统进行测试,看是否有一些功能没有实

Java学习第一天

今天是Java学习的第一天,感触很多,由于没有编程基础,所以开始听得有点云里雾里的,但好在洛昊老师讲得很耐心仔细,慢慢的也明白老师讲的内容了.      今天主要学习了Java语言的基础格式和用法,学习了“类”,并使用了基础的public class来实现hello world 的显示.后面在老师的演示下学习了使用Java语言运行“加减乘除”的运算.下午学习使用scanner来运算变量.最后自己编写了“英寸”单位转换为“厘米”单位的代码.      总之今天的学习让我对Java产生了更多的兴趣.

java学习笔记(珍藏版+基础版)

搭建Java开发环境使用开发工具开发Myeclipse基础核心:JAVASEEEME面向对象 API JVM.JAVAEE是指java enterprise edition,java企业版,多用于企业级开发,包括web开发等等很多组建JAVASE是指java standard edition,Java标准版,就是一般Java程序的开发就可以,可以看作是JAVAEE的子集 JVM(java virtual machine)源代码myprogram.Java--(编译器)二进制字节码myprogra

Java学习第一步——JDK安装及Java环境变量配置

Java作为当下很主流的编程语言,学习Java的朋友也越来越多了,作为一门面向对象的编程语言,Java也有着安全.高 效等诸多有点.从TIOBE(TIOBE排行榜是根据互联网上有经验的程序员.课程和第三方厂商的数量,并使用搜索引擎(如Google.Bing. Yahoo!.百度)以及Wikipedia.Amazon.YouTube统计出排名数据,只是反映某个编程语言的热门程度,并不能说明一门编程语言好 不好,或者一门语言所编写的代码数量多少.)排行榜来看,四月.五月的数据分析,Java语言仅次于

从.Net到Java学习第一篇

以前我常说,公司用什么技术我就学什么.可是对于java,我曾经一度以为“学java是不可能的,这辈子不可能学java的.”结果,一遇到公司转java,我就不得不跑路了,于是乎,回头一看N家公司交过社保,连我自己都有点惊讶,居然有这么多家公司了.对于java的梗,这是有历史缘由的,大二的时候同一大波人去蓝杰参加java培训,当时一个空心的菱形怎么也写不出来,我写来写去就是一个实心的砖头,结果培训老师实在看不下去了,就说:“唉!你不适合搞java”,我看了下一同前去的几个同学一下子就都写出来了,搞得

JAVA学习第一天 基础概念学习

Java 第一天 1.PATH与CLASSPATH的作用         PATH:系统配置的可执行程序的路径.        CLASSPATH:*,class文件的加载路径,使用java命令解释类的时候通过CLASSPATH找到指定路径中的类文件. 2.Java中的数据类型划分:    `基本数据类型:        |- 数值型:            |- 整型:byte.short.int.long;                 ->  0            |- 实型:flo