解决方案 »

  1.   

    // 对3472求质因数,改进前需要3477运算,改进后需要35次
    public static void fen_jie_zhi_yin_shu(int x) {
    int num = 0;// 用于统计运行次数,与算法实现没什么关联
    int sushu = 2;// 用于试除的数
    int n = x;// 保留当前将被分解的数值
    int first = 1;// 用于控制显示,和算法实现关联不大
    while (sushu <= n) {
    // if(x%sushu != 0){//性能改进
    if (n % sushu != 0) {
    // 当前的sushu不是n的因数,增加1,试验下一个数
    // 因为是从最小的素数开始试除的,如果sushu不是素数,一定会走这个分支
    sushu++;
    } else {
    // // 不把这段代码移到上面来,显示会有问题
    // 输出得到的一个因数,因为循环是从最小的素数开始试除的,所以,当前的
    // sushu的值一定是素数
    if (first == 1) {
    System.out.print(n + "=" + sushu);
    first++;
    } else {
    System.out.print("*" + sushu);
    }
    // x/=sushu;//性能改进
    // 得到当前n的另一个因数
    n /= sushu;
    // if (first == 1) {
    // System.out.print(n + "=" + sushu);
    // first++;
    // } else {
    // System.out.print("*" + sushu);
    // }
    }
    //检查算法效率用的,和算法关系不大
    num++;
    }
    //以下是显示用的,和算法关系不大
    System.out.println();
    System.out.println("num=" + num);
    }
    我试验了一下,做了点改动,写了一下注释,不清楚达到你的要求没有。