题目:将一个正整数分解质因数。例如:输入90,打印出90=233*5。

程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:

(1)如果这个质数恰等于(小于的时候,继续执行循环)n,则说明分解质因数的过程已经结束,另外 打印出即可。
(2)但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数n.重复执行第二步。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。

C语言实现:

#include<stdio.h>
int main()
{
    int n,i;
    printf("请输入整数:");
    scanf("%d",&n);
    printf("%d=",n);
    for(i=2;i<=n;i++)
    {
        while(n%i==0)
        {
            printf("%d",i);
            n/=i;
            if(n!=1) printf("*");
        }
    }
    
    printf("\n");
    return 0;
}

Java

public class Demo14 {

    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);

        // 输入
        System.out.print("请输入一个大于3的数:");
        int number = input.nextInt();
        fengjie(number);// 55
    }

    public static void fengjie(int j) {
        // Math.sqrt(55)=7.416...
        for (int i = 2; i < Math.sqrt(j); i++) {
            // i小于j的平方根 Math.sqrt(j)
            // 平方根,又叫二次方根,表示为〔±√ ̄〕,其中属于非负数的平方根称之为算术平方根(arithmetic square
            // root)。一个正数有两个实平方根,它们互为相反数,负数有两个共轭的纯虚平方根。
            // 这个if是找最小公倍数,最小公倍数:指两个或多个整数公有的倍数中最小的一个。
            if (j % i == 0) {// 就是判断你输入的数(55),和2至你输入的数(55)的算术平方根之间的某一个数可以整除
                // 5
                System.out.print(i + "*");

                // 这个if是判断他是不是素数,如果是素数,就将这个数输出,然后就执行break了
                if (isPrime(j / i)) {
                    System.out.print(j / i);
                } else {
                    // 如果不是素数,就继续分解,找公倍数
                    fengjie(j / i);

                    break;
                }

            }
        }
    }

    // 判断是否是素数
    public static boolean isPrime(int n) {// n=j / i,55/5=11
        for (int i = 2; i < Math.sqrt(n); i++) {// Math.sqrt(11)=3.31...
            // i小于n的平方根 Math.sqrt(n)
            if (n % i == 0) {// i==3
                return false;
            }

        }
        return true;
    }

}
最后编辑:2020年08月01日 ©著作权归作者所有

发表评论