java求素数和求一个数的一个正整数的质因数
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求素数和求一个数的一个正整数的质因数的更多相关文章
- JAVA 之 每日一记 之 算法( 给定一个正整数,返回它在 Excel 表中相对应的列名称。 )
题目: 给定一个正整数,返回它在 Excel 表中相对应的列名称. 例如: 1 -> A 2 -> B 3 -> C ... 26 -> Z 27 -> AA 28 -& ...
- 【线性筛】【筛法求素数】【约数个数定理】URAL - 2070 - Interesting Numbers
素数必然符合题意. 对于合数,如若它是某个素数x的k次方(k为某个素数y减去1),一定不符合题意.只需找出这些数. 由约数个数定理,其他合数一定符合题意. 就从小到大枚举素数,然后把它的素数-1次方都 ...
- 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, ...
- Algorithm --> 筛法求素数
一般的线性筛法 genPrime和genPrime2是筛法求素数的两种实现,一个思路,表示方法不同而已. #include<iostream> #include<math.h> ...
- ny225 小明求素数积
小明求素数积时间限制:1000 ms | 内存限制:65535 KB 难度:1描述 小明最近遇到了一个素数题,是给你一个正整数N(2=<N<=1000)让你求出2~N的所有素数乘积的后 ...
- Java求素数时出现错误
Java求素数时出现错误 1.具体错误如下 No enclosing instance of type Prime is accessible. Must qualify the allocation ...
- 筛法求素数Java
输出:一个集合S,表示1~n以内所有的素数 import java.util.Scanner; public class 筛法求素数 { public static void main(String[ ...
- Java【基础学习】之暴力求素数【用数组返回】
Java[基础学习]之暴力求素数[用数组返回] */ import java.util.*; public class Main{ public static void main(String[] a ...
- JAVA 基础编程练习题27 【程序 27 求素数】
27 [程序 27 求素数] 题目:求 100 之内的素数 package cskaoyan; public class cskaoyan27 { @org.junit.Test public voi ...
随机推荐
- Google Chrome Uncaught TypeError: object is not a function
<html> <script type="text/javascript"> function testForm(){ alert("hello ...
- 最短路径dijkstra算法
畅通工程续 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- Android 实用开源控件
图片放大缩小: PinchImageView 体验最好的图片手势控件,不同分辨率无缝切换,可与ViewPager结合使用. GestureViews 带有手势控制的ImageView和FrameLay ...
- ACM Arithmetic Expression
Description Given N arithmetic expressions, can you tell whose result is closest to 9? Input Line 1: ...
- 20161005 NOIP 模拟赛 T3 解题报告
subset 3.1 题目描述 一开始你有一个空集,集合可以出现重复元素,然后有 Q 个操作 1. add s 在集合中加入数字 s. 2. del s 在集合中删除数字 s.保证 s 存在 3. c ...
- Linux下bash: scp: command not found问题 或者装ssh包时报错 Requires: libedit.so.0()(64bit)
一.用scp命令从物理主机向CentOS 6.1虚拟机传送文件,提示以下错误:bash: scp: command not found到CentOS 6.1虚拟机查看也缺少scp命令.该虚拟机 ...
- 热烈庆祝华清远见成功自主研发Farsight TV 智能机顶盒
近日,华清远见研发中心再传喜讯:Farsight TV 智能机顶盒研发成功并投入教学!这是华清远见研发中心继开源平板电脑.智能医疗终端.智能家居终端后独立成功研发的又一智能硬件!至此,开创了华清远见自 ...
- tomcat配置环境变量
先把jdk配置好,这里不在赘述. 一.配置Tomcat环境变量 1,新建变量名:CATALINA_BASE,变量值:C:\tomcat2,新建变量名:CATALINA_HOME,变 量值:C:\tom ...
- c# winform 全角自动转化半角问题(C#中ImeMode的值):转载
调用 this.ImeMode = ImeMode.OnHalf; ImeMode 枚举:指定一个值,该值是用来确定在选定了对象时该对象的输入法编辑器 (IME) 的状态. 以下是微软的解释: 成员名 ...
- Nodejs Http发送post请求
Nodejs Http发送post请求 var http = require('http'); function epay(params) { console.log(" COME IN& ...