羊羊智力运动会(孪生漂亮数)

题目描述

羊历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");
		}
	}

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值