孪生漂亮数 【循环】
一个自然数, 若它的质因数至少是两重的(相同的质因数至少个数为二个, 如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; // 如果到最后都还没两个相同的因子 那我就 退出了... } }