题目描述
羊历3131年,青青草原上,羊羊族群十分繁荣昌盛,羊羊们在这里幸福地生活着。直到灰太狼带着妻子红太狼搬到对岸的森林,羊羊们才真正在现实中见到书上记载的狼。 灰太狼每天想尽办法要跨越铁栅栏抓羊,但他没想到的是,他的对手是全羊族里最聪明的喜羊羊,而且喜羊羊的背后还有智慧超群、又擅长发明的村长慢羊羊;大智若愚,馋嘴爱睡的懒羊羊;力大无比,勇敢无畏的沸羊羊;心地善良、气质非凡的美羊羊;以及温柔可爱,做事负责的暖羊羊。 善良勇敢的小羊们,凭借着智慧和勇气,一次次识破灰太狼的阴谋诡计。
为了更好地对付狼族,羊村搞了个羊羊智力运动会。老村长给参加运到会的羊羊出了一个智力题:
寻找孪生漂亮数。一个自然数, 若它的质因数至少是两重的(相同的质因数至少个数为二个, 如36 = 2 * 2 * 3 * 3) 则称该数为"漂亮数"。若相邻两个自然数都是“漂亮数”, 就称它们为“孪生漂亮数”, 例如8与9就是一对。
编程找出M~N之间的所有孪生漂亮数。
输入
两个正整数M和N,1=<M<N<=100000
输出
多行,每行一组孪生漂亮数,小数在前大数在后
没找到孪生漂亮数输出no find
样例输入
【样例输入1】
1 1000
【样例输入2】
1000 5000
样例输出
【样例输出1】
8 9
288 289
675 676
【样例输出2】
no find
解题思路
相邻的两个自然数都是”漂亮数“的话,这两个数就是”孪生漂亮数“
”漂亮数“就是一个自然数因式分解后,它所有的质因数都不能有单一的数字
如:12 = 2 * 2 * 3 就不是漂亮数了
代码示例:
import java.util.Scanner;
public class 羊羊运动会 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 输入m和n
int m = sc.nextInt();
int n = sc.nextInt();
// 标记这个数是不是漂亮数,默认false
boolean[] bool = new boolean[n - m + 1];
for (int i = m; i <= n; i++) {
int temp = i;
// 最小的质因数从2开始计算
for (int j = 2; j <= Math.sqrt(temp); j++) {
// 同一个质因数的数量
int count = 0;
// 因式分解
while (temp % j == 0) {
temp = temp / j;
count++;
}
// 如果只有分解出来的质因数只有一个,这个自然数就不是"漂亮数",跳出循环
if (count == 1) {
// bool[i - m] = false;
break;
}
// 分解完毕还没有跳出循环,这个自然数就是漂亮数
if (temp == 1) {
bool[i - m] = true;
break;
}
}
}
// 找出相邻的两个数是不是都是“漂亮数”,是的话就是“孪生漂亮数”
boolean tmp = false;
for (int i = 0; i < bool.length - 1; i++) {
if (bool[i] && bool[i + 1]) {
tmp = true;
System.out.println((i + m) + " " + (i + m + 1));
}
}
if (!tmp) {
System.out.println("no find");
}
}
}