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. Activiti工作流引擎参考资料

    Activiti工作流引擎使用 工作流-Activiti核心API介绍 传智播客Activiti工作流视频教程(企业开发实例讲解) 工作流引擎Activiti演示项目 http://www.kafei ...

  2. NODEJS-fs模块操作文件系统

    1. 使用 fs模块 对文件/目录进行操作 2. 使用 path模块 对路径进行操作 使用 fs模块 对文件/目录进行操作 读取文件内容 // fs.readFile(filename, [optio ...

  3. HTML5 的 applicationCache 应用程序缓存离线存储功能与 manifest 文件

    一. 实现 HTML5 applicationCache 的步骤 一般的操作步骤 1. 新建 manifest 文件 如文件名为  lzwme.manifest,内容配置参考如下: 01 CACHE ...

  4. Leetcode Combination Sum II

    Given a collection of candidate numbers (C) and a target number (T), find all unique combinations in ...

  5. ACM Color the fence

    Color the fence 时间限制:1000 ms  |  内存限制:65535 KB 难度:2   描述 Tom has fallen in love with Mary. Now Tom w ...

  6. BZOJ 1008 题解

    1008: [HNOI2008]越狱 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 7845  Solved: 3359[Submit][Status] ...

  7. Codeforces Round #160 (Div. 2) D. Maxim and Restaurant(DP)

    题目链接 想了挺久,枚举每一件物品,当做关键物品,假设再加这一件物品,就>=c了,把剩下的物品背一下包,dp[i][j]表示i个物品可以组成重量j的个数. 这样就可以知道前面放i件,后边肯定放n ...

  8. HDU 4433 locker(SPFA+DP)

    题目链接 去年区域赛的题目,早就看过题目了,又是过了好久了... 这题状态转移,一看就知道应该是 线性的那种,不过细节真的不好处理,一直没想出怎么搞,期间也看过题解,好像没太看懂... dp[i][j ...

  9. Android -- 简单的图片浏览器

    1. 效果图

  10. FMS Camera对象设置说明

    目录: 1.setQuality(Camera.setQuality方法)2.quality(Camera.quality属性)3.setMode(Camera.setMode方法)4.onActiv ...