孪生漂亮数 【循环】
一个自然数, 若它的质因数至少是两重的(相同的质因数至少个数为二个, 如36=2*2*3*3)则称该数为"漂亮数". 若相邻两个自然数都是"漂亮数", 就称它们为"孪生漂亮数". 例如8与9就是一对. 请编程再找出一对恰好大于9的"孪生漂亮数".
输入
输出
输出一行,两个大于9的"孪生漂亮数".之间用一个空格隔开。 (例: 28 29)
提示
分解质因子有关。
思路:其实分解质因子 是 把一个数一直除以各素数 (2、3、5、7、9.....) 然后能整除的话 就证明他是质因子 且 这个数要处于这个素数 再重复此步骤 直到这个数为1为止,即有点像短除法。
上代码!认真看注释!!!!!
import java.util.*;
public class Main{
public static void main(String[] args) {
// Scanner sc = new Scanner(System.in);
for(int i = 10;;i++) //10(i)以上的数 判断最近的一对孪生漂亮输且输出
{
if(zhiyinzi(i) && zhiyinzi(i+1)) //如果判断i 和 i+1 是漂亮数 那我就输出后跳出循环.
{
System.out.println(i+" " +(i+1));
break;
}
}
}
public static boolean zhiyinzi(int num) //分解质因子且有两个以上相同的返真 反之返假
{
int i = 2,sum = 0; //定义i为素数 sum为计数器(如果两个因子一样返假)
while(num != 1) //当num 为1 时 证明他的质因子都是不一样的 返回假
{
if(num % i == 0) //如果i是他的质因子
{
sum++; //那么计数器++
num /= i; // num = num / i (一般为2或3或5...(素数) 为什么呢 以为2就可以代替后面的 4啊 8啊 10啊 什么的 自己理解!)
if(sum == 2) //如果计数器为2 即有两个一样的质因子
return true; //那就返真
}
else { //如果不能被整除 那么 计数器清零 且 素数++
sum = 0;
i++;
}
}
return false; // 如果到最后都还没两个相同的因子 那我就 退出了...
}
}
作者:咸瑜