分解质因子及其应用孪生漂亮数及其算法

孪生漂亮数 【循环】

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

本文来自博客园,作者:咸瑜,转载请注明原文链接:https://www.cnblogs.com/bi-hu/p/14092506.html

原文地址:https://www.cnblogs.com/bi-hu/p/14092506.html