基础练习 分解质因数
问题描述
求出区间[a,b]中所有整数的质因数分解。
输入格式
输入两个整数a,b。
输出格式
每行输出一个数的分解,形如k=a1a2a3…(a1<=a2<=a3…,k也是从小到大的)(具体可看样例)
样例输入
3 10
样例输出
3=3
4=22
5=5
6=23
7=7
8=222
9=33
10=25
提示
先筛出所有素数,然后再分解。
数据规模和约定
2<=a<=b<=10000
解题思路
- 如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
- 如果n>k,但n能被k整除,则应打印出k的值,并用n除以k的商作为新的正整数n,重复执行第一步。
- 如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
代码实现
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
Integer a = scanner.nextInt();
Integer b = scanner.nextInt();
for (int i = a; i <= b; i++) {
if (i >= 3) {
String m = "";
int k = 2;
int j = i;
while (j != k) {
if (j % k == 0) {
m = m + k + "*";
j = j / k;
}
else if (j % k != 0) {
k++;
}
}
m = m + k;
System.out.println(i + "=" + m);
} else {
System.out.println(i + "=" + i);
}
}
scanner.close();
}
}
视频学习 导弹拦截
Description
某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。
输入导弹依次飞来的高度(雷达给出的高度数据是不大于30000的正整数),计算这套系统最多能拦截多少导弹,如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。
Input
输入描述:
一行,为导弹依次飞来的高度
输入样例:
389 207 155 300 299 170 158 65
Output
输出描述:
两行,分别是最多能拦截的导弹数与要拦截所有导弹最少要配备的系统数
输出样例:
6
2
代码实现
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String s = scanner.nextLine();
scanner.close();
String[] ss = s.split(" ");
int n = ss.length;
int[] num = new int[n];
for (int i = 0; i < num.length; i++) {
num[i] = Integer.valueOf(ss[i]);
}
int chang = -1;
int count = -1;
int[] dp1 = new int[n];
int[] dp2 = new int[n];
for (int i = 0; i < n; i++) {
dp1[i] = 1;
dp2[i] = 1;
for (int j = 0; j < i; j++) {
if (num[j] >= num[i]) {
dp1[i] = Math.max(dp1[i], dp1[j] + 1);
} else {
dp2[i] = Math.max(dp2[i], dp2[j] + 1);
}
}
chang = Math.max(chang, dp1[i]);
count = Math.max(count, dp2[i]);
}
System.out.println(chang);
System.out.println(count);
}
}