weixin_45413607 2022-09-06 15:06 采纳率: 42.9%
浏览 15

翁恺JAVA零基础第七周函数第一题 分解质因数

由于慕课的课后测验没有答案。
自己写的代码不知道正确不正确,所以详情各位亲们看一下
题目如图
自己的思路是先判断是否为质数,是质数就直接输出了,没啥好说的。
如果是非质数的话,先求该数字之前有多少个质数(多少个相当于质数数组的长度)。
然后把这些质数丢进一个数组里。
再通过将输入的数字对数组里的质数一个一个匹配,如果能够被数组里的某个质数整除,则输出该质数,然后将数组的序号初始化为1.
当数字自己最后除成了质数时,将最后的质数作为最后一位进行输出。

img


```java
package homework;

import java.util.Scanner;

public class The_7th_week_Composite {
    
    //判断是否为质数
    public static boolean Isprime( int a )
    {
        boolean prime = true;
        int n;
        
        n = (int)Math.sqrt(a);
        
        for ( int i = 2 ; i <= n; i++)
        {
            if ( a % i == 0)
            {
                prime = false;
            }
        }
        
        return prime;
    }
    
//    分解质因数
    public static void resolve_number( int number )
    {
//        求出非质数number前有多少个质数
        int length_prime = 1;
        boolean is_prime = true;
        for ( int i = 3; i <= number ; i++)
        {
            is_prime = true;
            for ( int j = 2; j < i ; j++)
            {
                if ( i % j == 0)
                {
                    is_prime = false;
                }
            }
            if ( is_prime == true)
            {
                length_prime += 1;
            }
        }
        int[] resolge_prime = new int[length_prime];
        int serial = 0;
        
//        将number前的所有质数归成数组
        for ( int i = 2; i <= number ; i++)
        {
            is_prime = true;
            for ( int j = 2; j < i ; j++)
            {
                if ( i % j == 0)
                {
                    is_prime = false;
                }
            }
            if ( is_prime == true)
            {
                
                resolge_prime[serial] = i;
                serial += 1;
                
            }
            
        }
        
//        开始打印分解质因数
        System.out.print(number + " = ");
        int count;
//        若可以被数组中的质数整除则打印该质数并将数组序号初始化为0
//        否则序号+1尝试是否可以被下一个质数整除
        for ( count = 0;number != resolge_prime[count];)
        {
            if ( number % resolge_prime[count] == 0 )
            {
                System.out.print(resolge_prime[count]);
                number = number / resolge_prime[count];

                System.out.print("*");

                count = 0;
            }
            else
            {
                count += 1;
            }
            
        }
        if ( number == resolge_prime[count] )
        {
            System.out.print(resolge_prime[count]);
        }
                    
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner scan = new Scanner(System.in);
        int Composite = scan.nextInt();
        while ( Composite > 100000 || Composite < 2)
        {
            System.out.print("请输入大于等于2小于等于100000的数字:");
            Composite = scan.nextInt();
        }
        
        if ( Isprime(Composite) == false )
        {
            resolve_number(Composite);
        }
        else
        {
            System.out.println( Composite + " = " + Composite);
        }
        
        
        scan.close();
    }

}


```

  • 写回答

1条回答 默认 最新

  • 於黾 2022-09-06 15:48
    关注

    你不审题呀
    告诉你乘号用小写的x,你为什么还输出星号
    正确不正确你不知道自己执行一下看看结果吗

    评论

报告相同问题?

问题事件

  • 创建了问题 9月6日

悬赏问题

  • ¥15 求!!为啥出错,咋改正
  • ¥50 关于在matlab上对曲柄摇杆机构上一点的运动学仿真
  • ¥15 jetson nano
  • ¥15 :app:debugCompileClasspath'.
  • ¥15 windows c++内嵌qt出现数据转换问题。
  • ¥20 公众号如何实现点击超链接后自动发送文字
  • ¥15 用php隐藏类名和增加类名
  • ¥15 算法设计与分析课程的提问
  • ¥15 用MATLAB汇总拟合图
  • ¥15 智能除草机器人方案设计