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

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

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

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

  (3)代码实现:

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

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

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

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

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

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

  (3)代码:

 /**
* 判断101-200之间有多少个素数,并输出所有素数。
*
* 分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数
*/
// @Test
public void test01(){
int num = 0; List<Integer> list = new ArrayList<Integer>();
for(int i = 101; i < 201; i++){
boolean flag = true; //每次执行的时候把flag置为true
for(int j = 2; j < Math.sqrt(i)+1;j++){
if(i % j == 0){
flag = false;
break;
}
}
if(flag){
num ++;
list.add(i);
System.out.println(i);
}
}
System.out.println("素数的个数为:"+num);
for(Integer n : list){
System.out.println(n);
}
}

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

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)代码如下:

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

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

java求素数和求一个数的一个正整数的质因数的更多相关文章

  1. JAVA 之 每日一记 之 算法( 给定一个正整数,返回它在 Excel 表中相对应的列名称。 )

    题目: 给定一个正整数,返回它在 Excel 表中相对应的列名称. 例如: 1 -> A 2 -> B 3 -> C ... 26 -> Z 27 -> AA 28 -& ...

  2. 【线性筛】【筛法求素数】【约数个数定理】URAL - 2070 - Interesting Numbers

    素数必然符合题意. 对于合数,如若它是某个素数x的k次方(k为某个素数y减去1),一定不符合题意.只需找出这些数. 由约数个数定理,其他合数一定符合题意. 就从小到大枚举素数,然后把它的素数-1次方都 ...

  3. O(n)求素数,求欧拉函数,求莫比乌斯函数,求对mod的逆元,各种求

    筛素数 void shai() { no[1]=true;no[0]=true; for(int i=2;i<=r;i++) { if(!no[i]) p[++p[0]]=i; int j=1, ...

  4. Algorithm --> 筛法求素数

    一般的线性筛法 genPrime和genPrime2是筛法求素数的两种实现,一个思路,表示方法不同而已. #include<iostream> #include<math.h> ...

  5. ny225 小明求素数积

    小明求素数积时间限制:1000 ms  |  内存限制:65535 KB 难度:1描述 小明最近遇到了一个素数题,是给你一个正整数N(2=<N<=1000)让你求出2~N的所有素数乘积的后 ...

  6. Java求素数时出现错误

    Java求素数时出现错误 1.具体错误如下 No enclosing instance of type Prime is accessible. Must qualify the allocation ...

  7. 筛法求素数Java

    输出:一个集合S,表示1~n以内所有的素数 import java.util.Scanner; public class 筛法求素数 { public static void main(String[ ...

  8. Java【基础学习】之暴力求素数【用数组返回】

    Java[基础学习]之暴力求素数[用数组返回] */ import java.util.*; public class Main{ public static void main(String[] a ...

  9. JAVA 基础编程练习题27 【程序 27 求素数】

    27 [程序 27 求素数] 题目:求 100 之内的素数 package cskaoyan; public class cskaoyan27 { @org.junit.Test public voi ...

随机推荐

  1. Iterable(迭代器)的用法

    一.前言 在开发中,经常使用的还是for-each循环来遍历来Collection,不经常使用Iterable(迭代器)的,下面记录一下terable是一般用法: 二.说明 迭代器是一种设计模式,它是 ...

  2. viewpager 与 radiogroup 联动时的位置问题

    public void onPageSelected(int position) {} 方法中得到radiobutton时,最好通过(RadioButton) this.radioGroup.find ...

  3. BZOJ 1045 题解

    1045: [HAOI2008] 糖果传递 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3502  Solved: 1623[Submit][Sta ...

  4. 腾讯 pc端面试(2015.10.26)

    整个面试过程全部围绕着我在前一家公司做过的项目开始提问.因为这个项目是我主要负责的,所以面试官第一个问题是让我讲解了整个项目的框架结构.在对于项目的框架结构的讲解方面,大致条理还算清醒但是因为很少对做 ...

  5. js获取屏幕大小

    1.js获取屏幕大小 <html> <script> function a(){ document.write( "屏幕分辨率为:"+screen.widt ...

  6. 不同版本vpb与osg对应关系

    不同版本vpb与osg对应关系 转自:http://blog.sina.com.cn/s/blog_668aae780101k6pr.html VirtualPlanetBuilder是一种地形数据库 ...

  7. sencha怎么在control层调用按钮

    暂时在这里总结了3种方法: config: { refs: { sendMaint: 'sendMaint', basicinfolist:'basicinfolist',refreshButton: ...

  8. How to get SQLite work on windows phone 8

    1.Install SQLite for Windows Phone SDKC:\Program Files (x86)\Microsoft SDKs\Windows Phone\v8.0\Exten ...

  9. 日志分析_统计每日各时段的的PV,UV

    第一步: 需求分析 需要哪些字段(时间:每一天,各个时段,id,url,guid,tracTime) 需要分区为天/时 PV(统计记录数) UV(guid去重) 第二步: 实施步骤 建Hive表,表列 ...

  10. PLSQL Developer注册码

    Product Code:4t46t6vydkvsxekkvf3fjnpzy5wbuhphqzserial Number:601769password:xs374ca