2.1求素数(判断101-200之间有多少个素数,并输出)
package com.dan.test;
//判断101-200之间有多少个素数,并输出
public class B01 {
public static int number() {
int counter=0;
for(int i=101;i<=200;i++) {
boolean flag=true;
for(int j=2;j<i;j++) {
if(i%j==0) {
flag=false;
break;
}
}
if(flag) {
counter++;
System.out.println(i+"是素数");
}
}
return counter;
}
public static void main(String[] args) {
System.out.println("101-200之间有"+number()+"个素数");
}
}
运行结果:
101是素数
103是素数
107是素数
109是素数
113是素数
127是素数
131是素数
137是素数
139是素数
149是素数
151是素数
157是素数
163是素数
167是素数
173是素数
179是素数
181是素数
191是素数
193是素数
197是素数
199是素数
101-200之间有21个素数
2.2兔生兔(有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子, 假如兔子都不死,问每个月的兔子总数为多少?)
package com.dan.test;
import java.util.*;
/*有一对兔子,
* 从出生后第3个月起每个月都生一对兔子,
* 小兔子长到第三个月后每个月又生一对兔子,
* 假如兔子都不死,问每个月的兔子总数为多少?*/
public class B02 {
public static void main(String[] args) {
int i=2;
int j=0;
int x;
int month;
for(month=1;month<=12;month++) {
x=i;
System.out.println("第"+month+"月的兔子总数为"+i);
i=i+j;
j=x;
}
}
}
运行结果:
第1月的兔子总数为2
第2月的兔子总数为2
第3月的兔子总数为4
第4月的兔子总数为6
第5月的兔子总数为10
第6月的兔子总数为16
第7月的兔子总数为26
第8月的兔子总数为42
第9月的兔子总数为68
第10月的兔子总数为110
第11月的兔子总数为178
第12月的兔子总数为288
2.3计算1000以内的水仙花数
package com.dan.test;
/*所谓"水仙花数"是指一个三位数,
* 其各位数字立方和等于该数本身。
* 例如:153是一个"水仙花数",
* 因为153=1的三次方+5的三次方+3的三次方。*/
public class B03 {
public static void main(String[] args) {
display();
}
public static void display() {
int a,b,c;
for(int i=100;i<=999;i++) {
a=i%10;
b=(i/10)%10;
c=(i/100)%10;
if(a*a*a+b*b*b+c*c*c==i) {
System.out.println(i+"是水仙花数");
}
}
}
}
运行结果:
153是水仙花数
370是水仙花数
371是水仙花数
407是水仙花数
2.4整数分解质因数
package com.dan.test;
import java.util.*;
/*将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
1. 如果这个质数恰等于n,则说明分解质因数的过程已经结束,
打印出即可。
2. 如果n>k,但n能被k整除,则应打印出k的值,
并用n除以k的商,作为新的正整数n,重复执行第一步。
3. 如果n不能被k整除,则用k+1作为k的值,重复执行第一步*/
public class B04 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("输入正整数:");
int number=sc.nextInt();
System.out.print(number+"=");
num(number);
}
public static void num(int n) {
for(int i=2;i<=n;) {
if(i==n) {
System.out.println(i);
break;
}else if(n%i==0) {
System.out.print(i+"*");
n/=i;
}else {
i++;
}
}
}
}
运行结果:
输入正整数:
90
90=2*3*3*5
2.5求最大公约数
package com.dan.test;
import java.util.*;
/*输入两个正整数m和n,求最大公约数*/
public class B05 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("输入正整数m:");
int m=sc.nextInt();
System.out.println("输入正整数n:");
int n=sc.nextInt();
System.out.println("正整数m和正整数n的最大公约数为:"+number(m,n));
}
public static int number(int m,int n) {
for(int i=Math.min(m, n);i>=1;i--) {
if(m%i==0&&n%i==0) {
return i;
}
}
return 1;
}
}
运行结果:
输入正整数m:
6
输入正整数n:
8
正整数m和正整数n的最大公约数为:2
2.6求数列前20项的和(有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和)
package com.dan.test;
/*有一分数序列:
* 2/1,3/2,5/3,8/5,13/8,21/13...
* 求出这个数列的前20项之和*/
public class B06 {
public static void main(String[] args) {
System.out.println("这个数列的前20项之和:"+num(20));
}
public static double num(int s) {
int a=1;
int b=1;
double sum=0;
for(int i=0;i<s;i++) {
int c=a+b;
a=b;
b=c;
sum=sum+(b/a);
}
return sum;
}
}
运行结果:
这个数列的前20项之和:21.0