博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java求素数和求一个数的一个正整数的质因数
阅读量:6824 次
发布时间:2019-06-26

本文共 3075 字,大约阅读时间需要 10 分钟。

1、题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少对?

  (1)程序分析:不难发现兔子的规律是:1,1,2,3,5,8,13,21....

    其实这个问题也就是求斐波那契数列的问题。

  (2)思路:应用递归来实现。1,2月的时候总数为一对,从第三个月开始就会产生一个新兔子,总数为2对,也就是born(n-1)+born(n-2)

  (3)代码实现:

1 /** 2  * 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 3  * @author lixiaochao 4  * 兔子的规律为:1,1,2,3,5,8,13,21.... 5  */ 6 public class Rabbit { 7     public static void main(String[] args) { 8         int n = 5;   //月 9         int m = 0;   //兔子总数10         m = born(n);11         System.out.println("一共有"+m);12     }13     public static int born(int n){14         if(n == 1){15             return 1;16         }else if(n == 2){17             return 1;18         }else{19             return born(n-1)+born(n-2);20         }21     }22     23 }

  总结:当时看这个问题的时候,一看有点绕,而且很容易绕晕了,我们现在开始把他列举一下,从而发现出规律,然后转换一下求斐波那契数列的问题,这个问题就会很容易做了。

    有的时候我们可以转换一下思路,问题有可能会变得很简单的。

2、判断101-200之间有多少个素数,并输出所有的素数,

  (1)分析:首先我们要先了解判断素数的方法是什么,用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。这种方法非常简单效率也非常快。

  (2)思路:略。(因为比较简单,所以省略掉了,如果大家对这个有疑问,可以留言告诉我)

  (3)代码:

1 /** 2      * 判断101-200之间有多少个素数,并输出所有素数。 3      *  4      * 分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数 5      */ 6 //    @Test 7     public void test01(){ 8         int num = 0; 9         10         List
list = new ArrayList
();11 for(int i = 101; i < 201; i++){12 boolean flag = true; //每次执行的时候把flag置为true13 for(int j = 2; j < Math.sqrt(i)+1;j++){14 if(i % j == 0){15 flag = false;16 break;17 }18 }19 if(flag){20 num ++;21 list.add(i);22 System.out.println(i);23 }24 }25 System.out.println("素数的个数为:"+num);26 for(Integer n : list){27 System.out.println(n);28 }29 }30

  总结:对于问题,我们要先想好解决问题的最好的方法,不要急于写代码,找到合理的算法才是解决问题最有效的途径。

3、将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。 

  (1)分析:

    对n进行分解质因数,应先找到一个最小的质数i,然后按下述步骤完成: 

    * (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。

    * (2)如果n > i,但n能被i整除,则应打印出i的值,并用n除以i的商,作为新的正整数,重复执行第一步。
    * (3)如果n不能被i整除,则用i+1作为i的值,重复执行第一步。

  (2)思路:先找到一个最小的质数i,这个数n是否能够整除这个最小的质数i,如果能整除,则n=n/i,如果不能整除,i=i+1,在再判断这个是n是否能够整除i+1,当这个质数恰好等于n的时候分解质因数结束。

  (3)代码如下:

1 /** 2      * 将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。  3      * 程序分析:对n进行分解质因数,应先找到一个最小的质数i,然后按下述步骤完成:  4      * (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。 5      * (2)如果n > i,但n能被i整除,则应打印出i的值,并用n除以i的商,作为新的正整数,重复执行第一步。 6      * (3)如果n不能被i整除,则用i+1作为i的值,重复执行第一步。 7      *  8      */ 9     @Test10     public void test(){11         int n = 7;12         int i = 2;13         while(true){14             if(n == i){15                 System.out.println(i);16                 break;17             }18             if(n%i == 0){19                 System.out.println(i);20                 n = n / i;21             }else{22                 i = i+1;23             }24         }25     }

  总结:多看,多想,多练!!!

转载于:https://www.cnblogs.com/lixiaochao/p/5666695.html

你可能感兴趣的文章
【Redis篇】Redis集群安装与初始
查看>>
jquery基础
查看>>
C# 集合已修改;可能无法执行枚举操作
查看>>
FSM Code Generator
查看>>
JDBC学习笔记——事务、存储过程以及批量处理
查看>>
JVM内存结构
查看>>
Java 锁
查看>>
7、索引在什么情况下遵循最左前缀的规则?
查看>>
c#中委托与事件
查看>>
mysql数据库备份之主从同步配置
查看>>
angularJs(1)指令篇
查看>>
自定义Xadmin
查看>>
jsp页面表单的遍历要怎么写
查看>>
循环引用,看我就对了
查看>>
软件工程——第一周作业
查看>>
ubuntu14.04安装vmware workstation
查看>>
ArcGIS API for Silverlight部署本地地图服务
查看>>
小知识点
查看>>
python mongodb MapReduce
查看>>
python-数据类型
查看>>